Skip to content

Instantly share code, notes, and snippets.

@ponkotuy
Last active September 13, 2017 09:18
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ponkotuy/02c091b00a9317bd8ee3 to your computer and use it in GitHub Desktop.
Save ponkotuy/02c091b00a9317bd8ee3 to your computer and use it in GitHub Desktop.
MyFleetGirls Presen

MyFleetGirls

自己紹介

  • ぽんこつ(@ponkotuy)
  • Scala書いてたら芸者東京でゲーム作ってた
  • 最近は艦これとエロゲばっかり

艦これ

  • みんなやってますね
  • 嫁(利根)かわいいよね
  • 手塩かけて育てた嫁自慢したいよね

MyFleetGirls

という訳で MyFleetGirls http://myfleet.ponkotuy.com というツールを作ってみた

できること

  • 自分の艦娘の公開
  • 資源グラフ
  • 入渠建造の通知
  • 建造開発ドロップ統計
  • Clientの全自動強制アプデ
  • 30億のデバイスで動くJavaの上で動くScalaだからLinuxで動く

アーキテクチャ

https://cacoo.com/diagrams/qAY2YfgNNzdK7LfY

主に使っているもの

Playframework
サーバ側のFramework
Finagle
クライアント側のProxyサーバライブラリ
ScalikeJDBC
DBアクセス
C3P0
ConnectionPoolライブラリ。後述
MariaDB
DB。MySQL飽きた
play-flyway
DB Migration
json4s
クライアント〜サーバ間の通信のSerializer
CoffeeScript
JavaScript生で書くのは小学生までd(ry
VueJS
AngularJSのTemplate機能を切り出したもの

最近の悩みはViewをPlay側で持つかVueJSでAJAX的にやるか

Finagle

プロキシ作れるツール色々試したがScalaだとFinagleが一番簡単

https://gist.github.com/ponkotuy/26f2b84b0e3c6ff28c33

ScalikeJDBC

  • 良い具合に複雑な例

https://github.com/ponkotuy/MyFleetGirls/blob/5bfe44b216fe4d28066ce832a57469aae6e515c5/server/app/models/CreateShip.scala#L48-L56

  • 自作BulkInsertの例

https://github.com/ponkotuy/MyFleetGirls/blob/5bfe44b216fe4d28066ce832a57469aae6e515c5/server/app/models/Ship.scala#L146-L168

  • 生に近いSQLの例

https://github.com/ponkotuy/MyFleetGirls/blob/master/server/app/models/ShipSlotItem.scala#L135

当初は全部自前で書いてたが、ボイラーコードは自動生成するようにした

ConnectionPool

scalikdjdbcのplay pluginが若干役不足なので、C3P0を使うPlay Plugin自作してみた

https://github.com/ponkotuy/MyFleetGirls/blob/master/server/app/plugins/MyConnectionPool.scala

その他

  • GitHubでMIT Lisenceで公開中 https://github.com/ponkotuy/MyFleetGirls
  • 4月末のアプデで艦これAPIが変わった時、最初に対応したツール(当社比
  • IntelliJのOpenSource Lisenceに合格

遠慮せずにStar付けてもいいのよ?

その他2

  • slotitemがデカ過ぎてClientからServerへのPOSTが容量オーバーで死ぬ人が現われる
  • shipがデカ過ぎてProxyがTimeoutして死ぬ事象
  • そもそもJSONの頭にapi_status: “成功” という謎の日本語が来る
  • JSONのIDを無意識にJIntでパースしたらエラー。何だと思ったらStringだった
  • 艦娘図鑑で殆ど1要素しかないJArrayが来てたのでクソがと思っていたら、特定艦娘だけ2要素来てパース失敗して死んだ
  • 全てのJObjectのKeyにapi_が付いているので、手が勝手にapi_を叩くようになる
  • 艦これのAPIこわい
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment