ひしだまの変更履歴

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

Java10 var

2018-04-21 22:57:35 | PG(Java)

Java10が2018年3月に出たんだけれども、その月はドラゴンクエストビルダーズのビルダー100景コンテストの応募期間だったので、そちらに注力しておりました
ビルダー100景コンテストで採用されると、今度発売されるドラゴンクエストビルダーズ2のエンドロールに名前が載るとあって、当然力を入れますわな(笑)

4月に入ってからも有志のDQB桜コンテストでアイデアが沸いたのでちょっと作っていました

というわけでJava10を調べるのが遅くなってしまったわけですが、とりあえずvarだけ試しました。

コメント
この記事をはてなブックマークに追加

Java mapValues

2018-02-04 09:50:17 | PG(Java)

https://twitter.com/gakuzzzz/status/958881286755516416

Javaで「Mapの値のみの変換」の話が出る度に「ScalaにはmapValuesがあるのになぁ」とつぶやいてgakuzzzzさんからMapStreamSyntaxを教わるということを繰り返している(※)ので、自分のページにメモった

※繰り返すといっても、(まだ)2回目のはず…!^^;

コメント
この記事をはてなブックマークに追加

2017秋アニメについて一言

2018-01-14 23:24:16 | Weblog

2017年10~12月期のアニメの感想。

  • 宝石の国
    • CGの勝利ですなw
  • クジラの子らは砂上に歌う
  • 魔法使いの嫁
  • 結城友奈は勇者である2
  • キノの旅
  • 少女終末旅行
  • このはな綺譚
  • ブレンド・S
  • ヤマノススメ2
  • 干物妹!うまるちゃんR
  • 鬼灯の冷徹2
  • 血界戦線&BEYOND
  • 十二大戦
    • 考え方のぶつかりが面白かった。
    • 虎に対する「ただ殺す牛」は、よく考えられているなぁと感心した。
  • UQ HOLDER!~魔法先生ネギま!2
  • URAHARA
  • 食戟のソーマ3
  • ラブライブ・サンシャイン2
  • つうかあ
  • アニメガタリズ
  • 妹さえいればいい
    • アホな話と真面目な話の落差が激しい^^;
    • TRPGが出てきたのは高評価だが、誤解を招く表現はやめろw

  • Code:Realize~創世の姫君~
  • Dies irae
    • 世界観というか人間関係がよく分からない。原作を知らずにケイオスドラゴンを見た人もこんな感じだったんだろうか。
    • あと、「妙なる調べ」は「みょうなる」じゃなくて「たえなる」な。格好つけた台詞の日本語が間違っていると、ファイブスター物語みたいで格好わるいぞ。
  • 王様ゲーム
    • 他に類を見ないアニメだったが、他に無いからといって楽しいわけではない。

 


再放送で『シュタインズゲート』をやっていた。これは嬉しい。何度見ても面白い。

あと『妖怪人間ベム』もあって、リメイクかと思ったら本物だった^^;
有名な作品なのでこういう再放送もあっていいと思うけど、さすがに1話だけしか見なかった…。

コメント
この記事をはてなブックマークに追加

Pythonの勉強をすることになりました

2018-01-08 20:13:11 | プログラミング

Pythonの勉強をすることになりました。
2017年末~2018年正月のほとんどはPythonに消えましたぞ^^;

最近機械学習というものが流行っておりまして、そのライブラリーを呼ぶのにPythonがけっこう使われているらしいんですな。で、Pythonを使っている機械学習の本をちょっと見てみたところ、なんとなくは分かるものの、やはり細かいところは理解できない。
というわけでPythonを勉強してみたわけですな。
その結果、理解できないと思った辺りはスライス記法だったらしいということが分かりましたw(これは確かにJavaScalaには無い)

Pythonは最近よく聞くようになったとはいえ、Javaと同世代の言語。
なので、オブジェクト指向と言う割にはメソッドと組み込み関数のどちらを使うのか整理されていなかったりする点は歴史的経緯から仕方ないんでしょうね^^;
しかしリストやタプルは操作しやすそうだし、変数に型が無い分、クラス関数関連の文法はかなりシンプル。
あと、内包表記というものが初めて理解できたw(Scalaのfor yield式が内包表記と呼ばれることがあったんだけど、どこが「内包」なのか分からなかった。Pythonのは括弧に囲まれているので、確かに内包されてるわw)

まぁ、Pythonの使い道が機械学習等のライブラリー呼び出しがメインということであれば、複雑なクラスを作ったりすることは無いだろうから、そういう人にとってはこれくらいの言語で良いのかも。

コメント
この記事をはてなブックマークに追加

Asakusa Frameworkで10億件のFizz Buzz

2017-12-25 00:00:00 | PG(分散処理)

FizzBuzz Advent Calendar 2017の25日目です。
Asakusa FrameworkでFizz Buzzを書いてみました。

Asakusa FrameworkはJavaでバッチアプリケーションを開発・実行する為のフレームワークです。
特徴は、大量のデータ(いわゆるビッグデータ)を処理するのに適していること(分散並列処理)と、
実行基盤としてApache Hadoop・Apache SparkM3BPを使用できることです。(同一のソースから、それぞれの基盤で実行できるバイナリー(jarファイル等)を生成できます)

AsakusaFWは結構重厚なフレームワークなので、本来はFizz Buzzのようなシンプルなアプリケーションには向いていないのですが、面白そうなので作ってみましたw
ソースは長くなるのでそちらを参照してもらうとして、ポイントだけ挙げておきます。


入出力

AsakusaFWはファイル(HadoopのHDFS上のファイルが基本だが、ローカルファイルやAmazon S3、RDBのテーブルでもよい)を読み込んで加工し、ファイルを出力する構造になっています。
つまり、入力が全く無い状態からデータを作り出すという事は出来ません。

そこで、数値が入ったファイルを用意し、その数値をFizz/Buzzに変換したCSVファイルを出力することにします。

↓入力ファイルの例

1
2
3
4
5

↓出力結果

1,1
2,2
3,Fizz
4,4
5,Buzz

データの並び順

AsakusaFWは分散処理を行う(入力データを行毎に分割して並列で処理する)ので、基本的にはデータの並び順に依存しないコーディングをしなければなりません。
ファイル出力時にソートして出力することは出来ますが。

1行に1つの数値という入力データを変換していくFizz BuzzはAsakusaFW向きの処理と言えます。


処理のコーディング方法

AsakusaFWは処理本体をJavaで書きますが、そのメソッドの事を演算子と呼びます。
関数型プログラミング言語によるあるStream系処理に似ており、mapやfilterに渡す関数を演算子(メソッド)として定義していくイメージです。

演算子の種類はいくつかあるので、どの演算子を選ぶかがコーディングの肝になりますが、例えば以下のようになります。

private final FizzBuzzModel result = new FizzBuzzModel();

@Convert
public FizzBuzzModel convertFizzBuzz(NumberModel in) {
    long number = in.getNumber();

    result.reset();
    result.setNumber(number);
    result.setFizzBuzzAsString(getFizzBuzz(number));
    return result;
}

実行時間

最初に書いたとおり、基本的にAsakusaFWは大量のデータを処理することを目的としているので、100件程度の入力データではあまり有り難味がありません^^;

AsakusaFWの実行基盤がM3BPならデータ量が数十~数百GB、SparkならTB級も扱えるので、Fizz Buzz換算だと10億件以上ですかねw

コメント
この記事をはてなブックマークに追加

Asakusa Framework 1.0への妄想

2017-12-24 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2017の24日目です。

AsakusaFW 0.10.0のリリースノートの今後の予定を見ると、「将来リリース予定の Asakusa Framework バージョン 1.0 では」という言葉があります。バージョン1.0!
今まで0.nで10まで来たわけですが、そろそろ1.0になるんですね~。

というわけで、もし1.0になるなら、切りがいいので、ぜひStringOptionの中身をStringに…という事を妄想しましたw
今はStringOptionの中身はHadoopのTextクラスなので、Hadoop以外の実行基盤が主になってきた現在では、ちょっといまいちだと思うんですよね…。
データモデルのgetter/setterも、今はStringでアクセスする場合はメソッド名にAsStringが付いていますが、それを無しにする。

とはいえ、もしそうなると、今までのバージョンとは互換性が無くなってしまいますorz
ソースの後方互換性(あるバージョンで作ったソースは、後のバージョンでコンパイルできる)はAsakusaFWが守ってきた特徴のひとつですからね。これは失って欲しくないですね。

ということは、オプションで従来モードと切り替えられるようにするとか、過去バージョンからの変換ツールを用意するとか?
でもStringOptionUtilといった「Textを前提としたユーティリティークラス」もあるので、簡単には解決できそうにないですね…。

コメント
この記事をはてなブックマークに追加

DMDL EditorX Vanillaコンパイル 0.10.0対応

2017-12-23 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2017の23日目、拙作DMDL EditorXの今年の振り返りです。

AsakusaFW 0.10.0からAsakusa Vanillaという実行基盤が使えるようになりました。
主にフローのテストで使用されるものですが、pure Javaなので、Windows上でAsakusaアプリケーションを実行してみるのにも使う事が出来ます。

DMDL EditorXではツールバーに「バッチをコンパイルするボタン」がありますので、Vanilla用コンパイル(vanillaCompileBatchapps)を追加しました。
(それにしても、いまだにDMDL EditorXの「バッチをコンパイルするアイコン」に違和感があります。コンパイルって、Eclipseではどういうアイコンを使うのが良いんでしょうねぇ?)

コメント
この記事をはてなブックマークに追加

DMDL EditorX 文字列補完0.10.0対応

2017-12-22 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2017の22日目、拙作DMDL EditorXの今年の振り返りです。

Eclipseにはソースコードの補完機能があります。Windows版だとCtrl+Spaceで補完候補が出ます。
Eclipseプラグインでも補完機能を作る事が出来るので、DMDL EditorXでもデータモデルのプロパティー名を指定する文字列でプロパティー名を補完できるようにしています。

つまり、以下のような箇所で補完できます。

Operatorのメソッドの@Key

@Key(group = { "プロパティー名" }, order = { "プロパティー名" }) List<Model> list

Exporter

@Override
public List<String> getOrder() {
  return Arrays.asList("プロパティー名");
}

Operatorのテスト用GroupViewの作成(←New!)

OperatorTestEnvironment resource = new OperatorTestEnvironment();
GroupView<Model> view = resource.loader(Model.class, objects).group("プロパティー名").order("プロパティー名").asView();
コメント
この記事をはてなブックマークに追加

DMDL EditorX Xtext 0.9.2対応

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

Asakusa Framework Advent Calendar 2017の21日目、拙作DMDL EditorXの今年の振り返りです。

DMDL EditorXはAsakusaFWのdmdlファイルの編集を補佐するツールで、Xtextというフレームワークを使って作っています。

XtextはDSL(ドメイン特化言語)のエディターを簡単に作る事が出来るフレームワークです。
DMDLの文法を定義し、dmdlファイル内のキーワードに色を付けたり補完したりソースへジャンプしたりする機能に使っています。
このため、一旦Xtextの定義が完了した後は、そこを変更することはほとんど無かったのですが、AsakusaFW 0.9.2で新文法が追加になったので、今年はそれに対するXtext定義の修正を行いました。

昨日のaoetkさんのAsakusaFWアドベントカレンダーでも紹介されている@directio.text.csv (@directio.text.tabular)ですが、これに関してescape_sequenceという属性がマップのような文法で値を設定するようになっています。これが新文法です。

他にもプロパティー参照という文法が増えていますね。

DMDLの文法が変わる事は滅多に無い為、Xtextを修正するのも久しぶりになってしまい、毎回どこを直せばいいのか忘れてしまいます^^;

 
コメント
この記事をはてなブックマークに追加

Toad Editor 2017

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

Asakusa Framework Advent Calendar 2017の19日目、拙作Toad Editorの今年の振り返りです。

Toad EditorはAsakusaFWのフローをグラフィカルに編集し、Javaのソースを生成したりJavaソースへジャンプしたりすることが出来るツール(Eclipseプラグイン)です。
逆に、Javaソースから図(フローグラフ)を生成することも出来ます。

実際の業務でAsakusaアプリケーションを開発する場合、設計段階でフロー(グラフ・図)をVisio等で作成します。
これを、「Visioの代わりにEclipse上で図を描けば、そこからJavaソースが生成できるのでは?」という発想で作ったツールです。

が、実際に使ってみると使い心地はVisioに及ばないし、設計段階では省略するような細かい事もソース生成の為には記述する必要があり、設計書を描くツールとしては失敗した感があります(苦笑)
(ただ、AsakusaFWのフローがどんなJavaソースになるかを試すツールとしては便利かもしれません(笑))

そういう訳で昨年は全くToad Editorのソースは触っていなかったのですが、今年使った人から「グラフの生成がエラーになる」と言われ、超久しぶりに修正しました。
Asakusaコンパイラーが実行基盤毎に異なっていたのが、AsakusaFW 0.9.2である程度統一され、その影響で今まで使っていたコンパイル用クラスが無くなったのが原因です。

まぁ、他にもAsakusaFW 0.10.0で導入されたGroupView@Once@Spill等も対応していないのですが^^; 要望があったら対応するかどうか考えたいと思いますw

コメント
この記事をはてなブックマークに追加