カスタム検索

2010年9月14日火曜日

iOS4.1の目玉(?)GameCenterを使ってみた・その1

iOS4.1がリリースされ、GameCenterが正式に稼働となりました。

あんまり期待してなかったのですが、なんだかドキュメントを読んでいたら意外におもしろそうな感じ。
単純なスコアランキングから、条件達成、自動対戦マッチにフレンド機能と、自前サーバいらずな感じになりそう。
(どうせならアイテム課金の管理もAppleでやってくれたら完璧なのに・・・)

ちょうどスコア系のゲームをつくっていたので慣れない英語を必死に読みながら実装してみた。

・iTunesConnectにアプリケーションを登録する
登録必須です、スクリーンショットとか検索キーワードとか先に入れるの面倒ですが、後から変更出来ますのでとりあえず作っちゃいましょう。
登録したら、Manage GameCenterから、GameCenter Testingを有効にする。
Leaderboard(ハイスコア)とAchievements(条件達成)がセットアップ出来るので設定しておく。

・プロジェクトの設定
対象のプロジェクトにGameKitをLinkする。
GameKit/GameKit.h をインポートする。
ビルトプロパティの識別子をアプリケーションで設定したものと同じにする。(jp.co.hoge.application)

・稼働しているデバイスがGameCenterに対応しているか調べる
サンプルコードの isGameCenterAvailable に該当

・ユーザを認証する
サンプルコードの authenticateLocalPlayer に該当
ゲーム中にバックグラウンドでログアウトしたりする可能性があるので、GameCenterでの処理を行う前には必ず行う。

・スコアの登録
サンプルコードの reportScore に該当

・ランキングの表示
一般的なGameCenter用の表示と、カスタムでスコアだけ取得して自分で描画するパターンがある。
統合されたインターフェースで十分だったので、一般的な表示を使おうと思ったんだけど、cocos2dだとここがちょっと面倒に。
GKLeaderboardViewControllerDelegate を持つ UIViewController クラスを作成して、CCDIrector の openGLView に addSubview して解決。(超適当)
詳しくはココらへんを参照


とりあえずこんだけでランキングに登録、表示が可能になりました。
フレンドとかはGameCenter側で出来る話なので気にすることもなし。
オンラインマッチに関してはエイバースの中の人が詳しく紹介されてます。

あれ、その1で完結しちゃった。
Achievements触ってみてなんかあれば続きでも・・・

2010年8月31日火曜日

Flexで丸画像とか

Flexで四角以外のアイテムを生成するときのお話
忘れそうなのでメモメモ

丸画像に対してイベントを取得したい時など、Imageを使うと四角の領域でイベントが取得されます。
コンポーネントに対して mask 処理をしてやることで、任意の領域のみイベントの対象とする事が出来ます。

詳細はコチラ
Imageを拡張したクラスを用意して、 cornerRadius プロパティを追加。
描画更新時(updateDisplayList)に、cornerRadius の値からマスクを作成してセット。

2010年8月26日木曜日

cocos2dで日本語をCCBitmapFontAtlasで使うには

ちょっとはまったんでメモメモ

cocos2dでは文字の表示に CCLabel という簡単なものがあるのですが、これが結構な重い処理となります。
スムーズな動作を必要とするゲームなどでは、BitmapFontを使うと良いです。
(逆にADV系など速度を要求しないものであればCCLabelでおk)

現時点(cocos2d v0.99.4)では標準のままでは使えません。
公式フォーラムのコチラで問題点が指摘されています。

プロジェクト内の cocos2d Sources > cocos2d > CCBitmapFontAtlas.h を編集します。

kCCBitmapFontAtlasMaxChars = 2048

kCCBitmapFontAtlasMaxChars = 65536
に変更

BitmapFontを作る方法ですが、Hiero Font EditorというのとBMFontGeneratorというが推奨されているようです。

BMFontはWindowsでしか動かないので、とりあえずhieroを使ってみたんですが、どうもうちではうまく動作してくれませんでした。
(出力画像が天地左右反転されたり、出力対象がコピペできなかったり、一度出力すると変更して二度目の出力が出来なかったり)

なのでBMFontを使ったやり方を紹介します。

・必要な文字を含んだテキストファイルを作成(UTF-16で保存)
・Edit -> Select chars from file で上記ファイルを選択
・Export OptionsでBit depth を 32、png 出力
・Font Settingsで Font smoothing を選択

色などはお好みで、cocos2d側でも変更が効くので特に気にする必要もないと思います。
これで出力された .fnt ファイルを CCBitmapFontAtlas で読み込んでやればBitmapFontで描画されます。

2010年8月4日水曜日

今そこにあるpaypal

paypalが日本での本格展開を始めると言う事で、早速使ってみた。

使い始めるまでの準備をザックリと。

1.Paypalにサインアップする。
本番用と練習用(sandbox)では、別々にアカウントをセットアップする必要があるので注意。

2.sandbox内で使えるアカウントを作成する。
テンプレで作成出来るが、日本語アカウントはマニュアルで作るしかない。
ビジネスでセットアップすれば架空のカード番号が入力されるので、そのままセットアップする。

3.APIのアカウントを取得する
個人設定>APIアクセス>オプション2のAPI証明書を取得する

4.エクスプレスチェックアウトを有効にする
上と同じ所から有効にできる。
レガシーなウェブペイメントorメール決済を使う場合は必要ない、けどエクスプレスチェックアウトを推奨


上記に加え、本番アカウントならカード認証やら口座設定やらをしておく。

新しくはじめるなら、paypalのAPIに対応したカートを使うのが一番簡単。
APIのアカウントを設定するだけでいけるはず。

それではおもしろくない(?)ので、一からAPIをつついてみた。
APIではSOAPとNVP(Name-Value-PairただのPOST通信)が使えるらしいので、もっとも汎用的っぽいNVPをチョイス。

APIのURLや詳細はまずそうなので伏せるとして、流れは以下の通り。

1.SetExpressCheckout
今から支払いスルヨー!とpaypalに宣言する。
オプションでアカウント不要とか、画面表示を変えたりとか出来る。
APIコールに問題なければTOKENが返ってくるので、ユーザ向けページへTOKENを付けてリダイレクトする。

2.GetExpressCheckoutDetails
指定した戻り先のページに戻ってきたら、このAPIを実行。
ユーザがpaypalのページで入力した情報を取得する。(住所とか。クレジットカード番号は取得不可。)

3.DoExpressCheckoutPayment
決済処理の確定。

だんだんめんどくさくなってきたのでこの辺で終了。
paypalの利点は、他社に比べて圧倒的に安い事と、始めやすい(オンラインだけですぐ始められる)事でしょうか。
欠点としては日本での認知度の低さや、わかりにくさ(決済ページが英語表示、ユーザが日本語表示に切り替える必要がある)でしょうか。

2010年6月24日木曜日

iOS3のプロジェクトをiOS4に対応してみる

iOS4が正式に公開されたので、プロジェクトをアップデートしてみるテスト

iPhoneDevよりxcode 3.2.3 finalをインストール
古いxcodeやiPhone simulatorが立ち上がってたら落としておくこと。インストールに失敗する事があるので落としておく。
iTunesも途中で落とせと言われるので先に落としておくのが吉。

とりあえずそのまま以前のプロジェクトを実行してみる>エラー>あるある

UIView.h等で以下のようなエラーが多発
syntax error before '^' token

なぞい、コンパイラをGCC4.2からLLVM GCC4.2に変更すると回避出来るけど・・・
再度ビルド>エラー>ですよねー

今度はSBJSONでエラーが出てる
とりあえず最新版を落としてドキュメントを読んでみると、インストール方法が変わったらしい

追加SDKとリンカグラグをはずして、最新のオススメインストール方法(クラスコピーするだけ)に戻したらさっくり動いた
コンパイラの設定をGCC4.2に戻しても問題なし、と。なんだよ、ちょっと焦っちゃったヨ。

なんでJSON-Frameworkとか使ってないプロジェクトはそのままでいけると思う。
cocos2d(v0.99.3)に関しては今の所問題無し。

お次は実機に・・・と思ったらプロビジョニングされた実機がつながってないよ、と
どうやら実機をiOS4にアップデートしたら別物として認識されているっぽい
xcodeのオーガナイザからIdentifierをコピーして・・・と思ったら「デバイスを開発で使う」みたいなボタンが出ていたので押してみる。
iTunesConnectのIDをきかれ、xcodeからデバイスの登録が完了!
xcode上でiTunesConnectと連携出来るのね、これはイイ改良

HPから確認してみるとTeam Provisioning Profile: *というのが追加されていた
とりあえずこの状態で実機の動作確認もOK

シミュレータで注意しないといけないのが、HOMEボタンで終了ではなくなったので、HOMEおしてもタスクは実行中ということ(3G実機では終了されるけどね :p)
ここで新しいイベント(applicationDidEnterBackground)が飛ぶので、必要ならば処理を追加する。
コチラに日本語で詳しい内容がアップされています。
どうやらapplicationWillTerminateが呼ばれずに終わる事もあるそうで・・・?(本体ないし未確認)
終了処理はちょっと気を付けた方が良さそうです。

当面はiPhoneシミュレータを見ながらiPhone4が手元に届くのを待っています・・・

2010年4月23日金曜日

iPhoneでバイブレーションを作動させる



#import <AudioToolbox/AudioToolbox.h>

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);


AudioToolBoxをインポートして AudioServicesPlaySystemSound を呼ぶだけ・・・
Twitterでつぶやける程のコード量で拍子抜けしたw

2010年4月9日金曜日

Flex 自分メモ

・FlexBuilderでプロジェクトのプロパティ画面(Flexビルドパスなど)が表示されない時は、境界線をちょっと移動すると表示される。

・サイズが%指定の領域内でスクロールさせたい場合(VBox 100%など)は minHeight=0 を指定しておく

・ListのItemRendererでTextAreaなどを使用し、行数が増える場合データは正しく更新されるが、表示ははじめの行数のまま増えない。
この場合は itemRenderer="mx.controls.Text" を指定してやれば良い。

以上、メモ投稿

2010年4月6日火曜日

iPhoneおアプリ内課金について・その1

iPhoneでアプリ内課金をするのに色々と面倒だったのでまとめておく

概念とかはStoreKitガイド辺りで把握出来ますので、実際にコードに組み込む辺りを。


・まずはプロジェクトにStoreKitFrameworkを追加する。
プロジェクトの編集>一般>リンク済みライブラリの「+」から StoreKit.framework を選択して追加
なぜかリストには反映されないが、動作しているので気にしない
これってiPhoneアプリ的には常識なんでしょうかね・・・まったく知らなかったんでここに来るのすら苦労しましたw

・下準備

#import <StoreKit/StoreKit.h>

して、クラスに <SKProductsRequestDelegate> を追加する

こんな感じ


#import <StoreKit/StoreKit.h>

@interface TestLayer : NSObject <SKProductsRequestDelegate> {
}
@end




・購入するアイテムの情報を取得

SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"PRODUCT_ID"]];

PRODUCT_IDはitunes connectで指定したものをあてる。
通信中の処理待ちなどはアプリ側で各自実装、リクエストが終わると productsRequest がコールされる



-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
// プロダクトの取得
SKProduct *product = [[response products] lastObject];

// アイテムのタイトル
NSLog(@"%@",product.localizedTitle);
}


request は requestDidFinish で解放してやりましょう



- (void)requestDidFinish:(SKRequest *)request {
[request release];
}



itunes connectへ課金アイテムの登録がうまくいっていれば、この時点でアイテムの名称がログに出力されます。
後は SKPaymentQueue の使い方と、テストユーザでの購入の仕方、その際のTIPS等

2010年3月21日日曜日

iPhoneアプリはじめました

というわけで無事Appleの審査も通りAppStoreへ公開されました!

アプリのダウンロードは以下より
ScratchGirl

無料アプリなんで良かったら遊んでみてください :)

2010年3月11日木曜日

AppStoreへ申請するアプリにjson-frameworkを使用している場合の注意点

AppStoreへアプリを登録する際に、嫌というほど目にする以下のエラー

The binary you uploaded was invalid. The signature was invalid, or it was not signed with an Apple submission certificate

基本的にはCodeSign系のエラーですが、その他のエラーもすべてこれで帰ってくるもよう。
Webで調べたら以下のような症状があった。

・Developerの証明書でビルドしていた
・Distribution or Provisioningの証明書の有効期限が切れていた(それぞれ別の有効期限になるので注意)
・Info.plistのBundle identifierが登録した内容と違っていた
・プロジェクト>アクティブターゲット"あぷり名"を編集>プロパティ>識別子 がInfo.plistのBundle identifierと一致しなかった(基本的には同期するはずなんだけども・・・)
・アイコンファイルのサイズが57x57ではなかった、また24bitでなかった(これに結構ひっかかってた・・・24bitのPNGでもMacのプレビュー>インスペクタではビット深度8と表示される)
・コード署名IDの設定を、プロジェクト>プロジェクト設定を編集 から行った(必ず、アクティブターゲット"あぷり名"を編集 から行った方が良いです)

Xcodeのビルドは基本的に差分ビルドなので、Distributionの場合は毎回クリーンした方が良いです。
そして、Xcode自体にもなんやらキャッシュっぽい感じで設定が残るようです。
公式にもありますが、いったんCodeSignをはずして、クリーンしてフォルダも消して、Xcodeを再起動してCodeSignを当てなおすとうまく行くとかあるようです。

で、色々やった結果全部だめだったので途方にくれていたのですが、ふと使用しているライブラリのCodeSignとかどうなるんだろと思って調べたら、これがビンゴでした。

cocos2dとjson-frameworkを使ったのですが、cocos2dは特に設定無しで問題ないもよう。
json-frameworkでは、2.2の頃にCodeSign系のなんやらがあったようで、以下の設定をすると良いとの事でした。

「アクティブターゲット"あぷり名"を編集」から「コード署名リソース・ルールパス」に、$(SDKROOT)/ResourceRules.plist を入力

説明には「ビルド実行可能ファイルのコード署名後に変更する有効な理由のあるファイルを除外するために、オプションで使用されます」とありますので、なんかの理由があるんでしょ、きっと。
2.2の頃の話+AdHocや実機デバッグでは問題なく動いていたので、マサカネーと思いつつアップしたらあっさりと通りました(><)

そんなわけで、転職しましてWebプログラマじゃなくなっていたりします。(Webアプリも書いていますが・・・)
無料アプリなので審査が通ったら公開致します :)

2010年2月4日木曜日

C#でiPhoneアプリを作ってみた!

C#や.Net Frameworkを使ってiPhoneアプリを開発出来るというMonoTouchを使ってみた

まずMonoFrameworkMonoDevelopをダウンロード&インストールする。(共にMac版)
次にMonoTouchのSDKをダウンロードする
上記2つは無料らしい、MonoTouchは有料だけどTrial出来るので今回はそれで試してみました

あ、もちろんiPhoneSDKは必須です。AppleIDを取得すれば無料でダウンロード可能

全部インストールした所でおもむろにMonoDevelopを起動、、、はい、文字化けしてます
ぐぐると早速答えがあったので設定します



はい、バッチリ日本語でました
とりあえず公式のチュートリアルを進めてみます

ファイル>新規>ソリューション で テンプレートから C#>iPhone を選択



早速使えるテンプレートが増えているようです、今回はHelloWorldなんで、iPhone Window-based Projectでいってみましょう
とりあえず作成しただけの状態で実行してみます・・・



iPhone Simulatorが立ち上がってまっしろな画面が出ました、ここまでは良好ですね。
生成されたプロジェクトの MainWindow.xib をダブルクリックすると InterfaceBuilder が起動しました。
この辺はXcodeで作る時と同じ容量で良さそうですね。

InterfaceBuilderで生成されたOutletやActionを、MainWindow.xib.designer.cs という自動生成されたファイルで関連付けしてくれます。
で作ってみたHelloWorldがこんな感じ



残念なところは、MonoDevelopが日本語入力出来ません・・・
ファイルを直接別のエディタで編集すれば日本語も使えますが、ちょっと効率悪いですね。
実機テストもしてみようかと思ったのですが、実機テストが出来るのは有料版のみのようです。

C#マカーがどれだけいるのかわかりませんが、actionscript等、別の言語で作れるようになるのは非常に良い事です。
今後に是非期待しましょう!

2010年2月3日水曜日

kumofs その5・スケールアウトしてみた

kumo-serverを2台のマシンへセットアップし、色々試してみました。

スケールアウト時のチェックポイントはserverのIPや名称等は必ず一意となるようにつける事です。
例えばmanagerを起動するサーバで
kumo-manager -v -l localhost
kumo-manager -v -l 127.0.0.1
とかやってしまうと失敗します。必ず自分のIPか一意のサーバ名としましょう。

前回接続が不安定だったのはSpymemcachedが原因でした。
memcached client for javaで接続したらエラーにならずにすみました。
んが、こちらの方が速度が遅いようです。

1台から2台にした結果、速度は遅くなりました。
まぁ2台ではボトルネックの方が大きくなってしまうのでしょうがないですね・・・

memcached client+2台状態での速度は以下のような感じでした。
Set
128,187ms

Get
112,314ms

どちらも大体同じくらいの速度で安定して動きました。
SetはHSQLDBより遅くなりましたね・・・
GetをチューニングしたらHSQLDBが最速になるかな??と思って試してみました

Indexあり HSQLDB Get
637,811ms
622,084ms

Indexなしより4倍ぐらい早くなりましたが、kumofsと比べるとだいぶ遅いですね。
CouchDBより微妙に遅い程度なので、Grailsの中だけで使うDBという割当にCouchDBは向いていません。

続いて障害時の検証

memcached clientには複数のmemcachedをPoolして使う機能があります。
なのでkumo-gatewayを二つたてて二つをPoolして使ってみました。

マシン構成
server1 - kumo-manager , kumo-server , kumo-gateway
server2 - kumo-server , kumo-gateway

・すべてが稼働している状態からserver1or2のkumo-gatewayを落とす
正しく取得出来たり、Exceptionが出たり。
memcached clientでは接続先が落ちているかどうかまで判断はしてくれないようです。
A,Bどちらを落とした場合でも結果は同じです。

・すべてが稼働している状態からserver1or2のkumo-serverを落とす
何事もなかったかのように動作しました。

・片方のkumo-serverしか動いていない状態で、データを追加or変更し、落ちているkumo-serverを復旧させる
復旧した時点では not attached になっていますので、Aのマシンからattachします

kumoctl server1 attach

attach時にReplicationが行われ、アプリケーションからは常に変更後のデータが取得されます。
もちろんノンストップでいけます。

という事で、memcached clientのPoolは使わずに、公式のオススメどおりwebアプリとkumo-gatewayを1:1にし、kumofs側で障害対策をするのが良いようです。

2010年2月1日月曜日

kumofs その4・速度比較してみた

Grailsから kumofs と couchDB で速度比較してみました。(ついでにRDBMSも)
対象データは全国の郵便番号(12万件)をキーに住所を入力しています。

kumofs+spymemcachedでは、大量のデータをいっぺんに投げると接続が不安定になります。
一応接続方法を DefaultConnectionFactory から、KetamaConnectionFactory (蹴球?)に変えたら多少良くなったような気がしました。(が、たまにエラーでます)

やり方は前回のサービスの一部を変更↓


def void afterPropertiesSet() {
memcachedClient = new MemcachedClient(new KetamaConnectionFactory(60000,60000), AddrUtil.getAddresses("localhost:11211"))
// memcachedClient = new MemcachedClient(AddrUtil.getAddresses("localhost:11211"))
}


コメントアウトしたところが元のソースです。
念のためバッファ等もあげてあります。


CouchDBはRESTですべて行えるので、Grailsからはサクサク使えるのですが、Java用のライブラリがあったので試してみました。
勢いのあるjcouchdbを使っています。

インポートはこんな感じで書きました

Database db = new Database("localhost", "postal");
def doc=new BaseDocument()
doc.setId(key)
doc.setProperty("val",val)
db.createDocument(doc);


・結果はこんな感じ
データインポート





kumofsCouchDBHSQLDB
21,917ms980,457ms41,883ms
18,785ms1,008,333ms33,800ms
18,205ms955,118ms35,256ms
17,387ms3回で心が折れました31,735ms
18,062ms32,539ms


取得した結果はこちら





kumofsCouchDBHSQLDB
51,357ms564,257ms 2,803,802ms
45,988ms 590,907ms 2,764,875ms
50,615ms 539,712ms 2回で心が折れました
46,966ms 3回で心が折れました
48,286ms



・ちなみにDBの容量はこんな感じになりました。
元のテキスト 12mb
kumofs 22mb
couchDB 600mb

couchDBは差分もてたりする分情報が多いのは理解出来ますが、ちょっとありえないサイズになってますね・・・


・まとめるとこんな感じ
(そもそも単純なKVSであるkumofsとMapReduce出来るCouchDBを比べるのも変かも知れませんが・・・あえてTokyoTryrantとかとは比べないのがうちっぽいという事で)

速度だけでみたらkumofsが最速(安定性に不安があるけど・・・)
CouchDBは想像以上に遅かったですね、、、特に書き込み。
ってそういう見方もあるけど、CouchDB良い所はKVSやSQL文になじみのない人がチームにいても理解しやすいって所だと思います。

RDBMS(今回はHSQL使ってます)の読み込みの遅さは正直壊れたのかと思うぐらい遅かったです・・・
まあINDEXもチューニングも何もしていない状態だとこんなものでしょうか。
そこらへんはプログラマならやって当然の事なんですが、そういう事考えなくても早いDBってのも良い物ですよね。

次回はkumofsをスケールアウトしてみます、果たして更なる速度向上はあるのか!?

2010年1月29日金曜日

kumofs その3・Grailsと連携してみた

Grailsからkumofsを使ってみます

・適当な Grails アプリケーションを作成します
grails create-app kvstest

・memcachedクライアントのライブラリをインストールします
kumofs は memcached プロトコルを使用します。
今回は memcached の Java クライアントである Spymemcached
を使用します

上記サイトからJARファイルをダウンロードして lib フォルダへコピーします


・やりとりをするサービスを作成します
IBMのサイトにとても良いサンプルがあるのでこれを参考にします
上記サイトにあるサービスがほぼそのまま使えます
setのタイムアウトが600と指定されているのですが、kumofsでは0しか受け付けないため、0に変更します

*デフォルトの接続方式だと大量データでエラーが起きたので変更しました、そこらへんは次回に。

->Spymemcachedの問題でした、解決方法はこちらのエントリーで

memcachedClient.set(key, 0, value)


・適当なコントローラーを作成してget,setをテストします
本当に適当なので割愛、SSだけ





サクっと動きました!
次回はCouchDBとの速度比較なんかをやってみます

2010年1月28日木曜日

kumofs その2・Macで起動させてみた

とりあえずインストール出来ましたので、早速起動してみましょう
まずはkumofsの構成から

・kumo-server
データノード
実データが保存される場所、最低1つ

・kumo-manager
管理ノード
kumo-serverの管理を行う、1or2台

・kumo-gateway
アプリケーション <-> kumo-serverのプロキシ
アプリケーションからは常にここを参照するため、裏のmanager,serverの構成がどんな風に変わっても問題ない
アプリケーションサーバに対して 1:1 で起動する


とりあえずオールインワンで動かしてみます
・管理ノードを起動
kumo-manager -v -l localhost

・データノードを起動
kumo-server -v -l localhost -m localhost -s /opt/kumo/kumodb.tch

・起動したノードを確認
kumoctl localhost status

hash space timestamp:
Thu Jan 01 09:00:00 +0900 1970 clock 0
attached node:
not attached node:
127.0.0.1:19800

not attached node に登録されていますね。

・起動したデータノードを実際に参加させます
kumoctl localhost attach

・もっかい確認します
kumoctl localhost status
hash space timestamp:
Thu Jan 28 14:42:43 +0900 2010 clock 152
attached node:
127.0.0.1:19800 (active)
not attached node:

・プロキシを起動します
kumo-gateway -v -m localhost -t 11211

・telnet で接続確認します
telnet localhost 11211
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying fe80::1...
telnet: connect to address fe80::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

・データを入れてみます
set hoge 0 0 3
foo
STORED

・データを取得してみます
get hoge
VALUE hoge 0 3
foo
END

hoge=foo というデータが入りました!

次回はGrailsと連携してみます

kumofs その1・Macにkumofsを入れてみた

この記事は書きかけでMacがクラッシュしたため、当社比-120%の説明不足でお送りさせていただきます。

kumofsとは
・内側=KVS用のライブラリであるTokyoCabinet(mixi等で使用されている)を使用
・外側=グローバルスタンダードなmemcachedプロトコルでのやり取りが可能
・簡単にスケールアウトが可能なスケーラビリティを持ったKVS
という認識!

なんだかワクワクする構成なのでとりあえず試してみた

Macでのインストールをベースに書いていきます。


・gccのバージョンをあげる
kumofsのインストールにはgccの4.1以上が必要です
MacではXcodeをインストールする事によってgccがインストールされますが、デフォルトのバージョンは4.0.1です
4.2も一緒に入っているので、これを切り替えます

cd /usr/bin
sudo rm -rf cc gcc c++ g++
sudo ln -s gcc-4.2 cc
sudo ln -s gcc-4.2 gcc
sudo ln -s c++-4.2 c++
sudo ln -s g++-4.2 g++


・TokyoCabinetのインストール
最新のソースパッケージをダウンロードして

./configure
make
sudo make install


・MessagePack(C++API)
MessagePackはバイナリでシリアライズ可能な形式
JSONのバイナリ版みたいな感じ、JSONよりもシリアライズ/デシリアライズが高速で、容量も小さい

C/C++向けのソースパッケージをダウンロードして

./confifure
make
sudo make install


・MessagePack(RubyAPI)

gem install msgpack
でさくっと入るはずなんだけど何故かうまくいかなかったので、ソースからインストールする
Gitは http://code.google.com/p/git-osx-installer/ からダウンロード

git clone git://git.sourceforge.jp/gitroot/msgpack/msgpack.git
cd msgpack
cd ruby
ruby extconf.rb
make
sudo make install


・kumofsのインストール
最新のパッケージをダウンロードして

./configure
make
sudo make install

上記のインストールが終わっていれば正常にインストールされると思います

/usr/local/bin/kumo*
のファイルがあればOKです

次回は実際に起動をしてデータを入れてみます

2010年1月27日水曜日

コンパイルされたClassファイルからJavaのバージョンを取得する

Javaのバージョントラブルがあったので、忘れないうちにメモ!
ココを参考にしました。

javap -v ClassFile | grep major
(クラスファイル名に .class はなしでOK)

で以下のように表示される(はず)

major version: 47

Javaのバージョンとの対比表

1.1 = 45.3
1.2 = 46.0
1.3 = 47.0
1.4 = 48.0
1.5 = 49.0
1.6 = 50.0

なので、上記の場合は 1.3でコンパイルされている、と。
Grailsって中のファイルとPluginでコンパイルされるバージョンが違う・・・Javaの参照の仕方が違うのかな