Diary

Ubuntu 10.04 or 10.10でSunのJDKを入れる

UbuntuでSunのJava(JDK)を入れるには、sun-java6-jdkを入れていた。
しかし、Ubuntu10.04からデフォルトではsun-java6-jdkが入らないようだ。
しかし、リポジトリに追加すれば 今まで通りapt-getでSunのJavaを入れることができる。

リポジトリへの追加は以下のコマンド。

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

後はいつもの様にインストール

sudo apt-get install sun-java6-jdk

JAVA_HOMEは/usr/lib/jvm/java-6-sunに設定する。

Mavenのpom.xmlからEclipseのプロジェクトを作成する方法

Jettyをデバッグする際に必要になったのでメモ。

オープンソースなプロジェクトのソースコードを拾ってくると、Mavenのpom.xmlだけあり、Eclipseのプロジェクトの設定は無いことが多い。
自分でEclipseのプロジェクトを設定するのは激しく面倒なので、pom.xmlから生成するのがよいだろう。

ちなみにMavenは3.0.1で、pom.xmlはJetty6のmodules/utilのpom.xmlに対して行った。

まずJettyをsvn coして、pom.xmlのあるディレクトリへ移動する。そして次のコマンドを入力するだけ。

>mvn eclipse:eclipse

すると.classと.projectを生成してくれるので、後はEclipseのimport -> Existing Projects into Workspaceを選んでプロジェクトをインポートすればOK

ほかにもEclipseのMavenプラグインなんかでもできるようだ。

Slim3良いよ

新しいWebサービスを趣味で開発しているんだけど、その際問題の一つがサーバをどうするか。開発中は自宅サーバでも良いけど、運用するのであれば自宅サーバでは信頼性にかける。
また、サービスがヒットした際に負荷分散を考えようとすると一気に難易度が上がり、自宅サーバでは難しくなる。もちろんレンタルサーバでも厳しい。
そこでGoogleが提供するGoogle App Engineである。

これは、簡単に言うとGoogleさんがサーバを提供してくれて、大量の負荷がかかってもGoogleさんのすごい技術で何とかしてくれるプラットホーム。開発者はアプリの開発をするだけで良く、サーバの管理や、負荷分散はGoogleがやってくれる。しかもめちゃ使わなければ無料と来てる。

が、良いことずくめではなく、RDBが使えなかったり色々制限があるんだけど、そのあたりを使いやすくしてくれるのがGoogle App Engine上で動くWebフレームワークのSlim3。こいつを使うと癖のあるGoogle App Engine上のデータベースを簡単に使うことができる。JavaでGoogle App Engineのアプリ書くならとりあえずこれで決まりじゃなかろうか。

Slim3を使うなら、本はとりあえず次のを読んでおけばOK

癖のあるGoogle App Engineのデータベースを1から解説してくれてる。Slim3自身の説明がちょっと少ないけど、さわればすぐわかるぐらいシンプルなのでOK。ビューはJSPなので、カスタムタグなどこったことをしたい場合はまたそっちの本を読めば解決。

と、書き殴ってみた。内容が薄い文章だと書くのは早いなw そして文章が頭悪そうだ。
綺麗な文章を書いている人は、どれぐらいの時間をかけて書いて、どれぐらい推敲しているのかちょっと気になる。

明けましておめでとうございます

新年明けましておめでとうございます。今年もよろしくお願いいたします。

Twitterでつぶやいてたら、特にこっちに書く内容が無くなってしまいました。
まぁこっちにはTwitterでつぶやけない内容(長さ的な意味で)をぶちまけていくことにします。まぁ以下の内容はネットに転がっているよく言われることと同じですが。

最近思っていることについて

ノイタミナ「フラクタル」 アニメの未来を問うヤマカンの戦い

なぜヤマカンが叩かれるのか

最近の萌えアニメばかりがもてはやされる現状はダメだ!と言いながら、その人気のある萌えアニメを作っているのが本人だから「お前が言うなよ」と言われるのは至極当然と言える。また、「こんなアニメが売れる世の中じゃ。ポイズン。」とか言いつつそのアニメを作るのだから、その原作者さんに失礼極まりない。ヤマカン自身は他の原作者が書いた作品のアニメを作っているだけで、ヤマカン自身が作った作品(アニメ)が一つもない。これらの作品にヤマカンの魂は入っておらず、ヤマカンらしさと言えば、オープニングやエンディングでキャラが踊るぐらいである。よってヤマカンの意見に説得力がないと感じるのではないだろうか。と言うかヤマカンのメッセージをアニメから受け取ったことがない。

ではヤマカンは間違っているのか

しかしながら、ヤマカンの言っていることは理解できる。今のアニメは小さなパイ(DVD,BDを買う人)を年間50から70作品のアニメで取り合うため、どうしてもDVDが売れる方向へ(つまり視聴者に媚びる方向へ)行ってしまう。従って、現状が良くないと感じている人は、ヤマカンをはじめアニメを作る立場の人間が良しとするアニメと、消費者がそう思うアニメにギャップがあると感じているのだと思われる。

これは、日本のゲーム、海外のゲーム、ハリウッドの映画も同じ現象であると感じる。海外のゲームは銃で撃ち合うゲームばかりで、海外のユーザは飽き飽きしているようだ。(しかし、販売本数で言うと、圧倒的に銃で撃ち合うゲームの方が売れている) ヤマカンはそれと同じ現象がアニメでも起こっていると言いたいのではないだろうか。

なぜこの問題が起こるのか

この問題は現状のアニメ業界のビジネスモデルに原因があると考える。現状のアニメ業界はDVDの売り上げを主な収益としているため、DVDが売れるかどうかが、アニメで稼げるかどうかなのである。すると当然、DVDを買う層がアニメのターゲットとなる。TVで見たアニメのDVDをわざわざ買う層は、アニメオタクであることが想像できる。従ってアニメがオタクに媚びる風潮になるのはどう考えても当たり前なのである。

ではこの問題に対してアニメ業界はどうしたらいいのかについては話題にしない。

ヤマカンとしては、「視聴者に媚びない面白くてインパクトのある作品を作り、萌えアニメに傾倒している視聴者の目を覚まさせてやろう」と新作のフラクタルを作るというのが解答なのだ。

ヤマカンに対して期待すること

知る限り、問題を提起しその解決のために行動しているのはヤマカンだけなので、大いにがんばって欲しいと思う。もちろん確実に叩かれる。ヤマカン初の自分の作品であるフラクタルも叩かれるだろう。それは当たり前の事で、それを気にせず自分が良しとするアニメの制作を続けて欲しい。
(知らない人に補足すると、ヤマカンはTwitter等での批判にマジレスしすぎる傾向がある)

以上、思ったことを文章にする練習でした。前半ふざけつつ後半まじめになったから相変わらずちぐはぐな文章だ。

言いたいことはとりあえず「ヤマカンがんばれ!フラクタル面白かったらDVD買うぞ!」
でも俺のDVD購入閾値はかなり高いのでよっぽどじゃないと買いませんw レンタルですませちゃいますw

ある作家個人の同人誌がアニメになった灰羽連盟のような作品が作れる時代が一番良かったのかな。しかしそういうアニメが利益に繋がらないとわかったので今のような現状になったのかもしれない。

ビジネスモデルを変えなければならないと皆が感じつつも、どれが最適解か試行錯誤中なのが今か。しばらく前はDVDオンリー、そこから劇場版で稼ぐ方向へ行って、次さぁどうしようかという感じ。

5年後はビジネスモデルがどう変わっているのか。また、アーティストが音楽を売るのでは無くて、初音ミクを使ってユーザが音楽を売るようなパラダイムシフトがアニメ業界でも起こるのか。まだまだアニメは面白そうである。

ってヤマカンの意見に説得力がないと感じるのではないだろうか。

夏休みに沖縄

遅めの夏休みに沖縄へ旅行に来ています。
台風が心配だったけど、結構天気はマシで良かった良かった。

玉取崎展望台からの夕焼け

プログラムを実行した際に、DLLが足りなくて起動しない場合にどのDLLが足りないかを調べる方法

開発したプログラムを他の環境に持って行くと次のエラーが出た。

このアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーションのイベント ログを参照してください。

VistaでVC++ランタイムが足りないとこのエラーが出るようだ。全く持って意味不明すぎるエラーメッセージ・・・。しかもWindowsのバージョン毎に違うメッセージとはまたすばらしい。

で、ランタイムを入れるが次のエラーが出た。

アプリケーションを正しく初期化できませんでした。 0xc015002

ランタイム入れたのに何でだろう。ググるとVC++のランタイムが足りない時のエラーのようだが・・・。
と、そんなときにどのDLLが足りないかを調べる方法があるので、それで調べると問題が解決する。

まずDependency Walkerを起動する。

C:Program Files (x86)Microsoft Visual Studio 8Common7ToolsBinDepends.Exe

そして開いたウインドウに問題のあるexeファイルをD&Dする。

するとなぜかVC++2005のランタイムにも依存している事がわかった。一部のdllが2005でコンパイルされたからのようだ。と言う事で解決。

CAsyncSocketのCreateで例外

CAsyncSocketを使っていると、ポートのバインド時に例外が発生した。
ググっても日本語の情報がなかったのでメモを残しておく。

現象は、socket->Create(nPort)するとDebug Assertion Falied!と言われ、CMapPtrToPtr::GetValueAt内のアサーションに失敗する。

void* CMapPtrToPtr::GetValueAt(void* key) const{
// ↓ ここで例外
ENSURE(this);
if (m_pHashTable == NULL)
return NULL;

UINT nHash = HashKey(key) % m_nHashTableSize;

// see if it exists
CAssoc* pAssoc;
for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext){
if (pAssoc->key == key)
return pAssoc->value;
}
return NULL;
}

検索するとAfxWinInitすればいいよと書いてあったがすでにしている。
で、結果はAfxSocketInit()での初期化が足りなかったので、AfxSocketInit()を追加すると問題は解決した。

if(!AfxSocketInit()){
OutputErrorLog(_T("Failed to Initialize Sockets."));
}

ActiveRobotAPIでプロキシを使う

ActiveRobotAPIを使うとGoogle Wave外からウェーブを操作する事ができるが、この時、プロキシを使わないとHTTP通信ができない場合、うまくWaveサーバにつながってくれない。Google Wave APIとしてはプロキシの設定を行うAPIは用意されておらず、システムプロパティを設定する事でプロキシを使うようになる。

設定するプロパティはhttp.proxyHostとhttp.proxyPort。
詳しくはこちらを参照する。

System.setProperty("http.proxyHost","プロキシサーバのアドレス");
System.setProperty("http.proxyPort","ポート");
HelloNewWaveRobot robot = new HelloNewWaveRobot();
try {
robot.createNewWave("新しいウェーブです!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

ActiveRobotAPIでNo consumer key is found for the RPC server URL

ActiveRobotAPIはOAuthで認証する必要がある。
が、Robot Registrationでコンシューマキーとコンシューマシークレットを取得し設定したのにもかかわらずNo consumer key is found for the RPC server URLと怒られる場合がある。そんなときはロボットのコンストラクタでsetAllowUnsignedRequests(true);を呼び出す必要がある。

public ActiveRobot(){
setupOAuth(CONSUMER_KEY, CONSUMER_SECRET, "http://www-opensocial-sandbox.googleusercontent.com/api/rpc");
setAllowUnsignedRequests(true);
}

Git導入

何度かGit導入したいなと思うことがあったけれど、Eclipseでの対応が微妙だったりで導入してこなかったGit。
業務ではSubversionを利用しているのだけれど、分散リポジトリだったら便利だろうなと感じる機会も多い。
そこでGitを勉強するため入門gitを購入し、Gitの知識をインストールする。


しかしGitになれるまでは、当分Subversionと共用していこう。

Google CodeのSubversionと共に生きるには次のようにしてSubversionリポジトリをインポートする。

$ git svn clone -s  https://kenji.googlecode.com/svn/ KenjiRepository

上記のようにしてインポートすると、Subversionデフォルトの構成でインポートされる。すなわちhttps://kenji.googlecode.com/svn/以下のtrunkがmaster、tagsがタグ、のようにだ。

Google CodeのSubversionリポジトリへの変更のプッシュは次のようにして行う。
Google Codeのユーザ名はdcommitする際に指定する。git configで指定したユーザ名は、dcommitでは使用されないようだ。

$ git svn dcommit --username kenjikitamura

んでGoode Codeのパスワードを入れると無事にGitでの変更がSubversionに反映された。