- 投稿日:2020-07-02T20:54:26+09:00
爆速シリアライズSimple Binary EncodingをRustで導入
https://speice.io/2019/09/binary-format-shootout.html
このサイトによると、FlatbuffersやCap’n Protoよりも断然速いSBE(Simple Binary Encoding)というのがあるらしいので、動かしたくなった
しかし、あまりにも誰も使われなかったので、公式のRustサポートがなくなったらしいもう少し評価されても良いコードだと思ったので、導入方法だけ書いておく
(日本で、少し流行らねえかな)サンプルを動かす
普通にgithubからcloneして、
https://github.com/real-logic/simple-binary-encodinggit checkout 23e8c16caf03d2b073bc850f37b1fb68cecbe54a
公式のRustのサポート終了したバージョンまで戻します。
ターミナルで、rootディレクトリまで行って、./gradlew
と入力します。
(Javaを誰でもビルドできるようにするツールらしい)次に
./gradlew generateRustCodecs
と入力します。
これで、sbe-samples/src/resources/...のxmlが、rust/car_example/src/car_example_generated_codec.rsに変換されました。
このrsファイルを使えば、依存crateがなく純粋なRustのコードだけで、SBEにシリアライズ/デシリアライズが可能になります。自分のスキーマを書く
build.gradleから、generateRustCodecsで実行される行動を変更できます
build.gradleのtaskに書いてあるdependsOnのアクションが実行されるようになってるみたいですbuild.gradletask generateRustTest(type: JavaExec) { main = 'uk.co.real_logic.sbe.SbeTool' classpath = project(':sbe-all').sourceSets.main.runtimeClasspath systemProperties( 'sbe.output.dir': 'rust/my-proj', 'sbe.xinclude.aware': 'true', 'sbe.target.language': 'uk.co.real_logic.sbe.generation.rust.Rust', 'sbe.target.namespace': 'my_codec') args = ['mine/my-entity.xml'] } task generateRustCodecs { description = 'Generate rust test codecs' dependsOn 'generateRustTest' // 新しく追加 // dependsOn 'generateRustCarExample', 'generateCarExampleDataFile' // 元々の実行関数 }などとします。
スキーマは、
xmlの
sbe:messageSchemaの中に書きます
以下、
xi:includeで、他の読み込むxmlを書きます
typesでエイリアスタイプを定義します
sbe:messageにそのEntityの内部変数を定義します。最後に
最近、SBEのRustのサポートは終了したのですが、現状、多言語間で通信可能な、最速に近いバイナリフォーマットっぽいので、いろいろ使い道はありそうです。Googleの、Flatbuffers, Protobufも悪くないのですが、SBEは完全に独立していて、高速に動くし、割といいのでは?と思ってます。
Rustの流行度次第では、またサポートもすぐに再開するかもなので、RustとSBEがもっと流行ればいいなと個人的に思ってます。
あと、serdeとかあるし、逆にRustのコードから、SBEのスキーマを書き出すのも普通にできそうですよね。(簡単そうならやってもいいかも)
- 投稿日:2020-07-02T16:20:16+09:00
【comandLine】 一言で コマンドライン 各種コマンド ターミナル
【ゴール】
mac terminalにおけるコマンドラインの理解
【メリット】
■ 作業効率UP
【環境】
■ Mac OS catalina
■terminal【その前に...】
■カレントディレクトリ = 今作業しているところ
■コード内「~~~~~」はユーザによって表示が異る
■以下のディレクトリ構造と仮定します。
hoge.terminalDesktop - work - practice -index.html【コード】
pwd
カレントディレクトリを確認
~~~~~~:~~~~~$ pwd /Users/~~~~~~ls
カレントディレクトリ内のファイルを確認
~~~~~~:~~~~~$ ls Desktopcd
移動
~~~~~~~:~~~~~$ cd Desktop/practice ~~~~~~~:practice ~~~~$ cd index.html ~~~~~~~:index.html ~~~~~$cd ..
一個前のディレクトリに移動
~~~~~~~:index.html ~~~~~$ cd .. ~~~~~~~:practice ~~~~$mkdir
カレントディレクトリに新規フォルダを作成
~~~~~~~:practice ~~~~$ mkdir challengetouch
カレントディレクトリに新規ファイルを作成
~~~~~~~:practice ~~~~$ cd challenge ~~~~~~~:challenge~~~~$ touch geho.htmlmv
ファイルやフォルダを任意の場所に移動
~~~~~~~:challenge~~~~$ mv cahllenge practicemv
ファイルやディレクトリの名前を変更
~~~~~~~:parctice~~~~$ cd challenge ~~~~~~~:challenge~~~~$ mv geho.html hoge.htmlrm
ファイルを削除
~~~~~~~:challenge~~~~$ rm hoge.htmlrm -rf
フォルダを削除
~~~~~~~:challenge~~~~$ cd .. ~~~~~~~:challenge~~~~$ rm -rf challenge以上、最終的に
最初と同じディレクトリ構造になっている。【合わせて読みたい】
■ 【Javascript】 メソッド まとめ 基礎基本コード メモ
https://qiita.com/tanaka-yu3/items/2438798d159fa402b1d5■ 【Rails new】Ruby on rails アプリケーション作成
https://qiita.com/tanaka-yu3/items/3fe1ed2852c6513d3583■ 【メソッド集】 rails メソッド まとめ 基礎 随時追加
https://qiita.com/tanaka-yu3/items/89abad875187494bec53
- 投稿日:2020-07-02T00:39:09+09:00
MacでMysql構築で手間取ったので備忘録
MacでMysql使いたいけどうまくログインができない
インストールして
mysql -uroot
しても
エラー起きるううう!!!!何でだあぁぁあぁぁぁぁぁぁぁ(z会)となりませんか? 私はなりました。
MACでのデータベース作成について
何はともあれインストールしてない人はインストールしましょう。
初めてのインストールの場合は以下の--skip-grant-tables
のオプションをつけて起動してください。zsh.コマンドbrew install mysql mysql.server start --skip-grant-tablesこれで上手くいくはずです。
ERRORが起きる場合
もし、既にインストールされていた場合は上記のコマンドを打つと、下記のように「既に存在してるんじゃバカたれ」と怒られてしまいます
zsh.コマンド2020-07-01T13:47:46.6NZ mysqld_safe A mysqld process already existsと出た場合は
brew services stop mysql mysql.server start --skip-grant-tablesを行ってください。 もしダメなら全て消して大丈夫な場合は
brew uninstall mysql
を行なってから一番上のものを試してくださいこのようなことに陥る理由としてはおそらく
mysql.server start --skip-grant-tablesをする前に
mysql.server startを行なっている可能性があります。
最後に
データベース使いたいと思っても何らかのエラーが出てしまって困りますよね(経験談)