ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

AsakusaFW 0.10.3 Direct I/O JSON

2019-06-14 23:17:53 | PG(分散処理)

2019/6/12にAsakusa Framework0.10.3がリリースされた。→リリースノート

一番の目玉はDirect I/OでJSONファイルの読み書き(のExporter/Importerが生成される)が出来るようになったことかな?
もちろんAsakusaFWはデータモデルというシンプルなクラスしか扱えない為、配列やらネストしたJSONは扱えないと思うけど。

これに伴って、DMDL EditorXの入力補完機能にdirectio.jsonを追加した。


後は例によって細かいバグ修正等。

ロギング演算子で上限境界の無い型引数が指定できるようになった。
…ロギング演算子を使おうと思ったことが無かったので、全然気付かなかった^^;

Hiveの入出力データ(orcファイル)のカウント情報のバグ修正。
レコード数とバイト数に同じ値が出力されていた^^;さすがにそんなデータは無かろうてw

Asakusa on Sparkで、Direct I/Oの出力ファイル名のパターンに「ランダムな値」を指定できるようになった。
ランダムな値とは「[0..9]」みたいなやつ。ワイルドカード「*」とかは以前からちゃんと使えていた。

com.asakusafw.bridge.api.Reportがdeprecatedになった。
ちょっと前のブログで書いた、パッケージ違いのReportクラスがあって紛らわしいという問題。ユーザーが使ってはいけない方にdeprecatedが付けられた為、間違ってimportするとコンパイル警告が出るようになった。
(このdeprecatedはまさにユーザーが使うのは非推奨という意味であり、廃止予定という意味では無い)

BinaryStreamFormat.createInputで使うDelimiterRangeInputStreamがdeprecatedになった。
これは将来廃止予定という意味のdeprecated。今後はLineFeedDelimitedInputStreamを使う。

BinaryStreamFormat.getMinimumFragmentSizeでLong.MAX_VALUEを返すのは駄目になった。
というか、Long.MAX_VALUEが返された場合の挙動がバグだったらしい。
getMinimumFragmentSizeは、入力ファイルを分割しない場合は-1を指定する。基本的には親クラスのデフォルトメソッドを使っておけばいいようだ。

コメント

AsakusaFW Reportクラス

2019-06-02 16:51:48 | PG(分散処理)

Asakusa FrameworkReport APIで使用するReportクラスでハマったのでメモ。

OperatorクラスではReportクラスを使って「Report.info("message");」のようにログ出力することが出来るが、Reportクラスには以下の2つがあり、前者を使うのが正しい。

  • com.asakusafw.runtime.core.Report
  • com.asakusafw.bridge.api.Report
後者はAsakusaFW内部のクラスらしいのだが、誤ってimportしてもOperatorクラス上は普通にコーディングできてしまうので、間違いに気付きづらい^^;
Operatorのテストを実行すると例外が発生するが、知らないと意味不明な感じの内容だ…。
(最初はAsakusaFWのバージョンアップによってReport APIの初期化方法が変わったのかと勘違いしたよorz)
コメント

Java12 プレビュー版switch式

2019-03-31 16:05:52 | PG(Java)

なんと今年初の投稿^^; ドラクエビルダーズ2でいかに忙しいかということですね(爆)

2019/3/20にJava12がリリースされた。
文法的に大きなところではswitch式。ただしJava12ではまだプレビュー版であって正式版ではないので、switch文のところからはリンクを張っていない。

Stringのindentメソッドは、もしかすると使いたい場面があるかもしれない。

Stream(Collectors)のteeingメソッドも、もしかすると使う場面があるかもしれない。

Filesのmismatchメソッドはどうだろうな。Javaでファイルの内容の一致確認をしようと思ったこと無いからなぁ。
ちなみにFilesにはisSameFileというメソッドもあるけど、これはファイルのパスが同じファイルを指しているかどうか調べるものであってファイルの内容を比較するものではないので、mismatchとは役割が違う。

コメント

DMDL テンプレートSPI

2018-12-24 00:07:46 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の24日目、拙作DMDLのテンプレート機能の紹介です。

これはだいぶ昔に作った機能なのですが、AsakusaFWのSPIの機能を利用して独自のDMDL属性(@template)を作り、テンプレートにその属性の内容を埋め込むものです。
つまり、これを使ってImporter・Exporter(FromCsv, ToCsv)のソースファイルを生成することが出来ます。

DMDL EditorXにはImporter・Exporterを生成するウィザードもありますが、個人的には微妙に使いづらく、結局、既存のクラスをコピペして修正して使うことが多いです。

その点、このテンプレート機能を使う方が楽そうです。(なお、テンプレートエンジンにはFreeMarkerを使っています)

ただ、AsakusaFW0.7の頃に作った物なので依存関係が古く、build.gradleに記述する際はAsakusaFWやHadoopの依存関係をexcludeしないといけません。
この辺り、Gradleでライブラリー化(Mavenのpomを生成)するときに依存関係を除外する方法があればいいんですけどねぇ。

コメント

DMDL EditorXリファクタリング機能

2018-12-23 23:58:18 | TRPG

Asakusa Framework Advent Calendar 2018の23日目、拙作DMDL EditorXの機能の紹介です。

今年DMDL EditorXに追加した最大の機能は、Operatorのメソッド名変更やパッケージ移動(リファクタリング)に伴って、JobFlowやFlowPartで使っているクラス名やメソッド名を追随して変更する機能です。

AsakusaFWではOperatorクラスに対してOperatorFactoryといったクラスを生成し、その中でOperatorと同名のメソッドやクラスが定義されます。
したがって、通常のEclipseのリファクタリング機能でOperatorクラスのクラス名やメソッド名を変更しても、JobFlowやFlowPartで使っているのはOperatorFactoryのクラス・メソッドなので、変更されません。
DMDL EditorXでは、これを変更するようにしました。

ただしバグがあって、一度に複数クラスを変更すると上手くいきません。(複数クラスを選択してパッケージ移動するとか、複数パッケージが含まれているパッケージの名前を変えるとか)
リファクタリング前にGit等にコミットして戻せるようにすることと、リファクタリングは1クラスずつ実行するようお願いします。

(Eclipseのファイル変更機能はどうにもよくわからない仕組みなのです…)

コメント

DMDL EditorX テストクラス作成ウィザード

2018-12-23 23:53:23 | TRPG

Asakusa Framework Advent Calendar 2018の22日目、拙作DMDL EditorXの機能の紹介です。

DMDL EditorXで最もよく使う機能のひとつが、JobFlowやFlowPartのJUnit用テストクラスを作成するウィザードです。

テストクラスと共に、テストデータを記述する為のExcelファイルも生成します。
AsakusaFW公式のExcelファイル生成機能はデータモデル毎に1ファイルですが、DMDL EditorXで作られるExcelファイルは(特に指定されない限り)1ファイルで、入力・出力・検証ルールの各シートがまとめて入っています。
また、テストクラスには、そのExcelファイルを使うコードが生成されるので便利です。

コメント

DMDL EditorX Operatorの使用箇所の検索

2018-12-21 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の21日目、拙作DMDL EditorXの機能の紹介です。

DMDL EditorXで最もよく使う機能のひとつが、Operatorのメソッドの使用箇所を検索する機能です。
通常のEclipseでもメソッドの使用箇所を検索する機能がありますが、Operatorの場合、JobFlowやFlowPartから実際に呼び出しているのはOperatorFactoryのメソッドなので、Eclipseのメソッド検索機能ではOperatorからは検索できません。

Operatorクラスのメソッドを右クリックし、「Asakusa DSL References」→「Search in src/main(Flow)」で使用箇所を検索できます。
(ちなみに「Search in src/main(Operator)」でも検索できます。こちらは本来はDMDL(のデータモデルやプロパティー)を使用しているOperatorを検索するものですが、Operatorのメソッドから検索しようとした場合はFlowを検索します。いわばお節介機能ですが、どのメニューを選ぶか考えなくていいので重宝しています(爆))

なお、たまにOperatorに定義したメソッドをFlowから呼び出し忘れることがあるので、使用されていないOperatorメソッドを抽出する機能があると便利かなーと思わなくもないのですが、実行時間が結構かかりそうなのでどうしたものかと…。

コメント

DMDL EditorX Spill

2018-12-20 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の20日目、拙作DMDL EditorXの機能の紹介です。

今日はドラゴンクエストビルダーズ2の発売日なので手短に。

GroupSortやCoGroup演算子の引数に指定できる@Spillを演算子作成ウィザードで指定できるようにしました!
以上!

コメント

JobFlow・FlowPart作成・変更ウィザード

2018-12-19 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の19日目、拙作DMDL EditorXの機能の紹介です。

これは常にウィザードで作成・変更するというクラスが、JobFlow・FlowPartです。
コンストラクターとフィールドを手で直すのは面倒なので^^;

新規作成はツールバーの「New JobFlow class」「New FlowPart class」から。
変更はJobFlow・FlowPartクラスで右クリックしてポップアップメニューを出し、「Source」→「Modify JobFlow/FlowPart Field」か、「DMDL EditorX」→「Modify JobFlow/FlowPart Field」で。

今年はFlowPartの変更ウィザードに値引数ページを加えました。
FlowPartの値引数、意外と使うんですよね。

ちなみに、変更ウィザードで変更すると、コンストラクターのソースのインデントが崩れます。これは、Eclipseのソースの整形機能で修正することを前提としています。
(ソースの整形、普通は自動的にやりますよね?)

コメント

DMDL EditorX @Keyの入力補完

2018-12-18 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の18日目、拙作DMDL EditorXの機能の紹介です。

OperatorのGroupSortやFold演算子等で使われる@Keyアノテーションのgroupやorderの文字列内のプロパティー名を入力補完することが出来ます。
AsakusaFWの仕様としてはcamelCaseとsnake_caseのどちらでもいいようですが、DMDL EditorXではsnake_caseに変換します。

個人的には、演算子生成ウィザードでメソッドを生成するときにグルーピングキーやソートキーは適当に指定しておいて、@Keyを入力補完するという使い方をよくします。

コメント