RustでのQuickFix実装日誌_2020/09/22

RustでQuickFixの実装を進めてまして以下のJavaでの実装のサンプルにあるBanzaiの動きをRustで書いています。 github.com 現在の進捗としてlogonを投げたあとHeartbeatを投げるところまで実装しています、 github.com

RustでTcpStreamを書き込みと読み込みに利用する

以前RustでTcpStreamを複数スレッドで共有し、それぞれ読み込み、書き込み用に利用するためにArc<Mutex>を使っていたのですが、改めて調べてみますとTcpStreamにはtry_clone()というメソッドがもともと用意されているようでした。 steavevaivai.hatenablog.com www.</mutex>…

QuickFIX/Jのカスタムフィールドについて考えてみる

QuickFIX/Jのメッセージでのカスタムフィールドについて考えてみました。動作検証はQuickFIX/Jのソースのサンプルに含まれるbanzaiとexecutorを動かしています。 https://github.com/quickfix-j/quickfixj/tree/master/quickfixj-examples まず、banzai側でN…

Arc<Mutex<T>>でスレッド間でデータを共有する場合のDropの必要性について

前回はArc<Mutex>でスレッド間でデータを共有する動作を確認しました。 steavevaivai.hatenablog.com その延長で今回はTcpStreamを複数スレッドで共有し片方のスレッドは読み込み続けて、もう片方のスレッドで書き込み続ける場合の動作を確認したのですが、際に自前</mutex>…

Arc<Mutex<T>>でスレッド間でデータを共有してみる

スレッド間でデータを共有するときOSスレッドを直接操作するのは大変な気がしたのでグリーンスレッドがcrossbeamを試してみたのですが、改めて公式のドキュメントを見てみるとちゃんと説明がありました。 doc.rust-jp.rs ArcとMutexの組み合わせによりスレッ…

RustでCrossbeamのグリーンスレッドを試してみる

Rustでは所有権やライフタイムがあるおかげで安全な実装をすることが出来ますが、Rustを始めたばかりの人は同じインスタンスに対し複数スレッドで一つのスレッドで監視をして、もう一つのスレッドで操作するといったことを行いたくなった場合大分てこずると…

QuickFIX/Jのサンプルに対してRustでリクエストを投げてみる

QuickFIX/Jとは QuickFIX/JはFIXエンジンの実装になります。FIXエンジン自体が聞きなれないと思いますが、FIXエンジンは電子取引で使われるプロトコルであるFIXプロトコルの実装になります。FIXエンジンについては以下のリンクが参考になります。 https://ja…

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

前回BNFパーサーが生成したパーサーでログをパースできるようになりましたので steavevaivai.hatenablog.com 今回はパースした後に整形表示できるようにしてみます。 修正のコミットはこちらになります。 bnfパーサー 整形表示実装 · teruuuuuu/logging_conv…

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

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

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

例えば以下のようなAAA ~ CCCに対してaddやremove、setの操作を行う時系列のログデータをもとに、現在の値がどうなっているのかを手動で見ていくのは大変かと思います。 2020-05-24 11:25:18,784 INFO jp.co.teruuu.LoggingService [main] add BAA:99.674 20…

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

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

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

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

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

Rustの勉強がてら以前話題になったチケット料金モデリングを実装してみました。 このチケット料金表を実装したのですが、すでにScalaで作られているこちらを参考にScalaからRustで作り変えていき、実装の違いのポイントを確認しながら進めてみました。 Rust…

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

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

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

QuickFIX/Jソースコードリーディング QuickFIX/Jとは QuickFIX/JはFIXエンジンの実装になります。FIXエンジン自体が聞きなれないと思いますが、FIXエンジンは電子取引で使われるプロトコルであるFIXプロトコルの実装になります。FIXエンジンについては以下の…

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

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

2019年の振り返りと2020年の目標

やってきたことを忘れないためにも2019年を振り返ってみて、2020年の目標を立てたいと思います。 やってきたことですが、個人的な取り組みとしていろいろな言語でパーサーの実装をしてきました。最初に実装をしたJavaでの方針をもとにほかの言語でも作ってみ…

JNIを使ってJavaからCとRustを呼び出してみた

JNIとは JNIとはJavaからネイティブコードを呼び出すための機能です。例えばC言語であればgccでコンパイルするときにsharedのオプションを有効にすることで共有ライブラリが作れるので、Java側ではSystem.loadLibraryやSystem.loadで共有ライブラリを読み込…

ISUCON9 Finalのベンチマークを動かして遊んでみた

ISUCONとは ISUCONとはWebアプリケーションの高速化を競うコンテストです。2011年から毎回開催されていまして、現在(2019年時点)で9回コンテストが開催されています。詳しい説明は公式ページがあるので、そちらを見ればよいかと思います。コンテストで動かす…

複数行grepする方法を調べてみた

複数行まとめてgrepしたいことがあったので、調べてみたら以下で説明で同じことをやろうとしていました。 stackoverflow.com grepに対して -P のオプションでPerlの正規表現を使えるようにし、 -z のオプションでテキスト全体を一つの行として扱うことで複数…

Scalaでのモナドの活用事例について

Scalaのfor式ではmap, flatMap関数を使って処理をつなげていけることが分かったとしても、実際にどのような場面で使われるのかが把握できないとモナドを使うメリットがわかないと思います。なので今回はScalaでのモナドの活用方法をいくつかまとめていきたい…

Scalaで作って理解するモナド

Haskellでのモナド型クラスが有名で、Haskellの創始者のひとりであるフィリップ・ワドラーはモナドについて"自己関手の圏におけるモノイド対象"と答えているらしい。そのほかにも調べているとモナドは箱に入った値を返す関数を箱の中の値に適用するといった…

scalaでjsonをパース後のASTを扱いやすいように型変換する方法について調べてみた

以前の作業でscalaでJSONをパースできるようになりましたが、そのままの抽象構文木(AST)の状態だと扱いづらいので変換する方法について調べてみます。 調べたところspray-json-shapelessというものがあり、これが丁度やりたいことに近いかと思います。 spray…

株とPythonの本を読んで株取引のシミュレーションを実装してみた

株とPython─自作プログラムでお金儲けを目指す本を読んでみました。 書いている内容としては株取引に必要となる基礎知識からシミュレーションを行うために必要なデータの収集方法、それから集めたデータを使ってのシミュレーター実装、取引用戦略と初めて株…

金融商品取引業者の種類について調べてみた

金融商品取引業者の種類について調べてみたときのメモ 金融商品取引業者の種類 第一種金融商品取引業 第二種金融商品取引業 投資助言・代理業 投資運用業

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた 環境構築(QuartusⅡ) 新規プロジェクト作成 新規verilogファイル作成 4bitレジスタの作成 演算装置(ALU)の作成 レジスタと演算装置を組み合わせてみる ROMから読み込んだ命令を実行する 命令のデ…

Ninety-Nine Scala Problemsを解いてみた

ドワンゴが公開してい新卒エンジニア向けのScalaの研修資料で一通り終わった後に説明があるNinety-Nine Scala Problemsについてリスト操作の問題を解いてみました。 せっかくなので何問かまとめてみようと思います。 P19 (**) Rotate a list N places to the…

ecサイトをモデリングしてscalaで実装してみる

以前行っていたecサイトのモデリングについて実際にScalaで実装してみたいと思います。 今回は以下のユースケースに対応できるつくりにしたいと思います。 ・ユーザはログイン画面でユーザ名、パスワードを入力してパスワード認証が行える。 ・ユーザはショ…

scalaでパーザーコンビネーターを書いてみた

パーザーコンビネータとは パーザを部品として、より複雑なパーザを構築する手法。例えば文字列の一致など基本的なパーサーを作っていおいて、それを組み合わせることで数式のパーサーを作ったりする。 なぜパーザーコンビネータ? 基本的な文法を覚えた後の…

確率的プログラミングモデルのGenのtutorialを触ってみた

Genとは 初心者向け汎用AIプログラミングシステムとの記事があって気になったのですが、数学の知識がなくても使えるとこことで普通のプログラマーでも扱えることを意識しているのかと思いました。Genの論文ではどのようなモデルでも表現できる『汎用の』モデ…