「CA×gloopsコアエンジニアによる合同技術勉強会!」に行ってきた
CA×gloopsコアエンジニアによる合同技術勉強会! Javaによるゲーム開発パッケージ化への取り組みとノウハウ /月間150億PVを捌く想像を超えた安定性と適応力を持つC#の魅力
http://atnd.org/events/31771
最初はCAの山田氏
天空のクリスタリアなどアメーバプラットフォーム上のソーシャルゲームの開発
サーバサイドはJavaで開発
今まで(半年ほど前まで)はチームごとに個別に実装していた
ガチャ、招待、トレードなどソシャゲにありがちな機能をライブラリとして実装
データ分析用のログ出力共通化なども。
社内Mavenリポジトリで管理。機能ごとにJarベースで提供。
コンテンツチームとは別にライブラリ(CoreSysと呼んでいるよう)チームがいる
ドキュメントはWikiで共有。非技術者にも読めるように(JavaDocのみではない)。
わかりやすい機能としてガチャライブラリについての説明
機能的には、世の中にでているガチャの機能は網羅している。
設定の切り替えでコンテンツ側のニーズにこたえられるように。
コンプガチャ関連の対応の話とか。
gloops 河合氏
進化する言語C# いま5.0
LINQ押し
ソース管理はSVN VisualStudioプラグインがある。
C#の真価はVisualStudioとの親和性にある。
Intellisenseサイコー!
ユニットテストは現状あまり書けてない
ディスカッションコーナー
なんでJava?
もともとCAにJavaエンジニアが多かったから
なんでC#?
CTOの池田氏のきまぐれ
VisualStudioとかWindowsサーバとかコスト的にどうなの?
VisualStudioは無償版もあるし、AWSでもWindowsサーバ、SQLサーバが選べる
設立3年未満の会社だとMicrosoftがディスカウントして提供してくれる?
チームごとにいろいろ。Struts系、Seasar、Springなど
カオスすぎて別チームに入りずらかったのでライブラリ化を進めた。
感想:
Java関連の話については、ウチとそんなに変わらないなーって感じ。
ウチではフレームワークを使ってないところが違うぐらいか。
共通部分のデータベース設計とか、コンテンツ、ライブラリの境界のトランザクションはどうしてるとか、汎用性を持たせるための設計とかそんな話を聞きたかった。
あと機能追加したとき、スキーマ変更とかないのかなーとか。マイグレーションとかしてるのかなーとか。
C#は前に書いていたときは2.0だったなーとか。
UnityとかVitaで使われていて、いい感じになってきたけど
サーバサイドで使うには他とくらべてやっぱりコストが気になりますね。
FluentdMeetUPでもgloopsの人がWidnows版まだですかとか聞いていたので
周辺ミドルウェアなどいろいろ考えるとWindowsサーバの敷居は高いような。
Connector/JとDBCP
Connector/Jの接続文字列に通常「jdbc:mysql://host....」と書くところを「jdbc:mysql:loadbalance://host....」と書くと接続をロードバランスしてくれるということに最近気付いた。
公式の日本語ドキュメント http://dev.mysql.com/doc/refman/5.1/ja/connector-j-reference-configuration-properties.html には全くそんな事は書いてなかったので見落としてた!
connectTimeout、socketTimeoutを適切な値に設定すれば、障害時にフェイルオーバーも行って、バランス対象からハズしてくれる。
loadBalanceBlacklistTimeoutを設定すればフェイルバックも可能。
DBCPとの組み合わせで、プーリングとフェイルオーバーの関連については、
もうちょっと調査していきたいところ。
(新しく接続を張り直さないとフェイルバックしない印象。)
Growl for Widnowsでコンパイルエラー通知
gruntでファイルの更新をwatchして自動でコンパイルして、エラー通知をgrowlでって環境をつくる途中でハマったので、メモ。
こんな感じのTaskで。
var command = 'jsx --enable-source-map --output ' + this.file.dest + ' ' + this.file.src;
var out = proc.exec(command, function(err, sout, serr){ if(err || sout || serr){ // エラーあり。 proc.exec("growlnotify " + serr); } else{ }
growlnotify にエラーメッセージを渡して実行するだけなんだけど・・・
通知が表示されない・・・。
- 単にプロセスを実行して引数として渡しているだけなので、メッセージにスペースが含まれていると引数の区切りになってしまう。
- 改行コードをそのまま(\n)渡すとNGで、ちゃんと文字列の"\\n"にする必要がある
ということで以下のようになった。
var msg = serr.replace(/"/g,'\"').replace(/\n/g,'\\n'); proc.exec("growlnotify " + msg);
他にもエスケープが必要なケースがあるかも