最後の一つのサーバ

某県のS市に、とあるゲーム開発会社があった。
携帯向けのゲームをいくつかリリースしているが、なかなか大ヒットに巡りあえていない。
かさむコストに対する声なき圧力により、少しずつサーバが削減されていた。
 
この会社に入社してもうすぐ3年になるジョンジーは、あるゲームのプロジェクト責任者だ。
このゲームは、もともと別の開発者たちにより作られたものだ。
彼らはこのゲームを作ったあとに新たなプロジェクトへ異動となり、ジョンジーが引き継いだのだ。
引き継ぎ前のジョンジーは、明るく快活でだれからも好かれるチャーミングな子だった。
しかし、ユーザーからのクレーム、過酷な売上ノルマ、いつまでも直らない不具合などが、彼女の雰囲気を一変させてしまっていた。
 
「あのサーバが全てなくなるとき、私は無職になるのね」
最近ジョンジーは、同期のスーにこのような弱音を吐くようになった。
「何を言うの? このゲームが面白くないのはあなたのせいではないし、それしきのことでクビになるわけないじゃない。」
そう励ますスーだが、この会社ではありえない話ではないということは、スー自身も気がついていた。
「いい? とにかくあなたは、遊んでくれるお客さんがいる限りがんばるのよ。」
そう言い残すと、スーは開発室へと足を運んだ。
 
「ベアマン、ベアマンはいる?」
開発室に入ったスーは、よく通る声で叫んだ。
ベアマンは、iPhoneAndroidのコアな技術が好きな技術オタクだ。
しかし彼の作るゲームはことごとく面白く無かった。
彼自身、ゲームそのものはあまり好きではないのも原因だったのかもしれない。
このソートのアルゴリズムはO(n^2)なので遅い、などという文句を部屋の隅でブツブツ呟く毎日を過ごしていた。
 
開発室にスーが入ってきたことにベアマンは気づいていたが、あえて無視をしていた。
そんなベアマンにスーは近寄り、声をかけた。
「いるなら、返事しなさいよ。」
「返事をするかしないかは、俺の勝手だ。」
「どうだか。それよりあんた、ジョンジーが管理しているゲームの事、知っている?」
ベアマンは、ジョンジーの名前を聞いて少し同様した。
今のゲームを引き継ぐ前の明るいジョンジーは、長くこの会社に勤めるベアマンにとって、数少ない癒しの存在だったのだ。
「ジョンジーが、どうかしたのか?」
「今のゲームのサーバが全部なくなったら、彼女、会社を辞めることになるわよ。」
「馬鹿な。それしきのことで会社を辞めるなんて、ありえない。」
「ありえない会社でないことは、あなた自身もよく知っているでしょ。」
ベアマンを除いた同期は全員、すでにさまざまな理由でこの会社を辞めていたのだ。
「あんたなら何とか出来るかもと思って来たんだけど、そう簡単じゃないのね。」
失望とあきらめの混じった顔で開発室を出るスーを、ベアマンはある決心を胸に秘めて見送った。
 
── 数日後
 
このゲームのテコ入れを行うために、大規模なブースト広告を打つことが役員会で決定された。
今や一台しか残っていないサーバでは到底さばき切れないトラフィックが予想されたが、誰もそれを口には出さなかった。
 

── さらに一週間後
 
「とうとう最後の一台ね。」
二本しかLANケーブルの刺さっていないスイッチをみて、ジョンジーがスーに語りかけた。
(作者注:一本はサーバに、もう一本はWANにつながっているので、計二本となっている)
「そうね。」
スーは、そう答えるだけで精一杯だった。
すでにマーケティング部門からは、1,000万円分の出稿をしたという知らせが届いていた。
App StoreでもGoogle playでも、ゲームの順位はまるで徒花のようにあがっていた。
おそらく最後のサーバには、信じられないトラフィックが嵐のように降りかかっているだろう。
しかし、ジョンジーもスーも監視ツールを立ち上げることはしなかった。
望んで手に入れたゲームではないとはいえ、しばらくメンテナンスをすれば愛着は湧いてくる。
そのゲームの絶命の瞬間を見ることは、心情的につらかったのだ。
ただ、最後のサーバが高負荷に耐え切れず散ってしまうのを待つしかできなかった。
そしていつしか、ふたりともサーバの前で眠ってしまった。
 
夜の間は切れてしまうエアコンのスイッチが入る音で、ふたりとも目が覚めた。
ふたりは同時に、最後の一台のサーバに目を向けた。
そこには、ふたりが眠る前と変わらずに起動し続けているサーバの姿があった。
信じられないとスーを見つめるジョンジーだが、スーには心当たりがあった。
ただ、彼が何をしたのかまではわかっていない。
「ジョンジー、ちょっと待っててね。温かい紅茶を買ってくるわ。」
そう言い残して、スーは再び開発室へと足を運んだ。
ベアマンを探しに。
 
「ベアマン! ベアマンはどこ!」
スーが駆け込んだ開発室に、すでにベアマンの姿はなかった。
かわりに彼のデスクに、一枚の手紙と数枚の設計書が置かれていた。
手紙には、ベアマンからスーへのメッセージが書かれていた。
『スーへ
ジョンジーに笑顔は戻ったか?
サーバがブーストにさえ耐えられれば、売上はあがり、評価も高まるだろう。
詳しいことは、別紙に記載したので見ておいてくれ。
どうやら俺は、ゲームを作ることには向いていないようだ。
自分らしい仕事は何かを探しに、この会社を出ようと思う。
また会う時があるとすれば、それは人生で最高にクールなシステムを見せてやる時だ。
じゃあな、ジョンジーによろしく。
 
p.s. 無視して悪かったな。あんたの来訪は、嫌いじゃなかったぜ。』
 
手紙を読んでいる途中からスーの頬を伝って落ちる涙が、ベアマンが書いた設計書を濡らす。
その設計書には、P2Pで端末同士が直接通信をするための方式が書かれていたのだった。
 
fin.

GWTの勉強 #3

とりあえずスタンドアロンモードでWebアプリを動かしてみる。

 

GoogleサイトだとSDKディレクトリの中にプロジェクト用の作業ディレクトリをつくる流れだけど、流石になんなのでPATHを切って自分のホームディレクトリで作業をすることにする。

 

$ export PATH=$PATH:/Applications/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.1/gwt-2.5.1/

 

ここでトラブル。開発モードでGWTアプリを動かすには、ブラウザにプラグインを入れてくれとメッセージが出てきた。GWTの公式サイトにはすごい小さい字でかかれているけど、必要みたいのでインストールしてみる。ブラウザ毎に異なるみたいだけど、ChromeだとWebストアでインストールするみたい。

Since this is your first time hitting the development mode server, it will prompt you to install the Google Web Toolkit Developer Plugin. Follow the instructions in the browser to install the plugin, which may require restarting the browser.

 

ブラウザをリスタートしてコピーしたURLを読み込むとなにやら名前を入力する画面が表示された。

うまく動いたみたい。

 

プログラムが出来上がったら

$ ant build

J2EE用のwebアプリケーションが出来上がる。さらに

$ ant war

J2EE用のWebアプリケーションサーバにデプロイできるwarファイルが出来上がる。

 

エクセレント!

 

GWTの勉強 #2

Get Started with the GWT SDK

 

JavaとAntがいるらしい。Javaは1.6が入っているのでおけ。Antは入ってないからインストールしないといかんな。Antのマニュアルによれば、特にMac OS X用のインストール方法はないので、ダウンロードしたバイナリを展開して、ANT_HOMEとJAVA_HOMEを設定しておくか。

 

次はGWTのダウンロードとインストール。どうやらEclipseを使うか使わないかで方法が違うみたい。ここではEclipseを使いたいので使う方で進めてみる。どうやら、EclipseのプラグインをインストールするとSDKも入るようだ。ついでにGAEもインストールしておく。ダウンロードも含めて10分くらいかかった。

 

SpeedTracerもインストールする。これはChromeのWebストアからインストールできた。ほぼ一瞬でインストール完了。

 

GWT Designerもインストール。これはEclipseのプラグインなんだけど、現在のところEclipse 3.7までしか対応していない様子。古いEclipseで開発してて良かった。何事も無くインストール完了。

 

最後にGWT SDKのダウンロードがあるけど、ちっちゃい時でこんな風に書いてあったので、ダウンロードはしない

Note - This download contains the standalone GWT SDK and tools only. If you're using Eclipse, we suggest that you download and install the Google Plugin for Eclipse instead.

ちなみに、Eclipseのプラグインを導入すると、SDKは以下のディレクトリに展開されていた。

$eclipse_home/plugins/com.google.gwt.eclipse.sdkbundle_2.5.1

GWTの勉強 #1

Google Web Toolkit - Overview

 

まずはGWTのトップページを見て、概要を理解してみる。ドキュメントがそろっていると、やってみようって気になるよね。

 

ふむふむ。

 

GWTは、複雑なWebアプリを開発するためのものです。ブラウザに関する知識が無くてもハイパフォーマンスなWebアプリをつくれることがゴールです。(今は亡き)WaveやAdWordsでも使われています。

 

GWTのツールボックスには、次の四つが含まれています。

SDK ... JavaAPIコンパイラ、開発用サーバが含まれる。JavaのプログラムをJavaScriptとしてデプロイできる

・SpeedTracer ... Webアプリのパフォーマンスを測定するためのChromeのエクステンション

・Plugin for Eclipse ... GWTのプログラムを開発するためのEclipseのプラグイン(これは、GAEのプラグインと一緒なので知っていた)

GWT Designer ... GWTの画面をグラフィカルにデザインするためのGUIツール

 

GWTの開発は、コード作成→デバッグオプティマイズ→実行の四つのフェーズがあり、それぞれGWTが対応している。

 

よくある導入だけど、改めて読むと期待できそう。

 

openvzで開発環境を作る #6

パスワードでなく鍵でssh接続しようとした時に、次のようなエラーが/var/log/secureに出てつながらない状況が発生。

sshd[484]: Authentication refused: bad ownership or modes for directory /home/git/.ssh

これは、.sshディレクトリのパーミッションが緩いのが原因(と教えてもらった)。
解決策は、パーミッションを700に変更すること。

openvzで開発環境を作る #5

ここみて、CentOS 6 + openldapで統合ユーザー認証できたよ

http://dan-project.blog.so-net.ne.jp/2013-03-29

ただし、最後の動作確認はサーバとクライアントが同じところにいることが前提なので注意。「4. ユーザーのホームディレクトリの作成」はクライアント側で行うこと。

symfony 1.x系で、IE専用のcssやjsを設定する

symfony 1.x系で、view.ymlのstylesheetの設定でIEのバージョンを指定する方法を見つけたので共有

http://stackoverflow.com/questions/6174392/conditional-ie-css-inclusion-in-symfony-1-2

 

view.ymlの設定:

default:
  stylesheets:
    - style_ie8.css: { condition: IE 8 }
    - style_ltie9.css : { condition: lt IE 9}

出力HTML:

<!--[if lt IE 8]><link rel="stylesheet" type="text/css" media="screen" href="/css/style_ie8.css" /><![endif]-->
<!--[if lt IE 9]><link rel="stylesheet" type="text/css" media="screen" href="/css/style_ltie9.css" /><![endif]-->