「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がディスカウントして提供してくれる?

  Javaフレームワークは?

  チームごとにいろいろ。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 にエラーメッセージを渡して実行するだけなんだけど・・・

通知が表示されない・・・。

 

  1. 単にプロセスを実行して引数として渡しているだけなので、メッセージにスペースが含まれていると引数の区切りになってしまう。
  2. 改行コードをそのまま(\n)渡すとNGで、ちゃんと文字列の"\\n"にする必要がある

ということで以下のようになった。

 

var msg = serr.replace(/"/g,'\"').replace(/\n/g,'\\n');
proc.exec("growlnotify " + msg);

他にもエスケープが必要なケースがあるかも

Windows+Aptana3でJSXを書いてる

セットアップの方法などはいろんなサイトに書いてるので、省略w

最近はいろいろWindowsでも動くようになってきて、楽になったなー。

 

Windowsでやる場合にハマる点は改行コード。

msysgitのインストール時に改行コードの扱いを聞かれるんだけど、

Windowsにオススメ設定な

【Checkout Windows-style, commit Unix-style line endings】

を選ぶとJSXコンパイラでナゾのコンパイルエラーでハマる。

 

 あとは、特に問題なくガリガリとコーディングをやるべし。