Hyper-V上で、keepalivedを検証する

keepalivedの検証にあたって

さし当たって、keepalivedの検証を行う必要がありました。
検証といえばAWS、と言いたいですが言えません。
AWSではvrrpが普通の方法では実現できないため、テストできないからです。
無論「普通の」と書いたのは、他に方法があるのですが、ここでは「普通に」テストするためなので、言及しません。
詳細は、@kentiestさんの書いた記事をご覧ください。
http://kentiest.wordpress.com/2013/05/12/ec2-vpc%E3%81%A7vrrp%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/: EC2-VPCでVRRPを動かしてみた

EC2(CentOS)にSAVをインストール

AWSのEC2(CentOS)にSAVFLをインストールする時の話です。
特に難しいことは無く、強いて言えば「サポート対象外」というのがネックです。
※SAVFL = Symantec AntiVirus For Linux。SEP(Symantec Endpoint Protection)のLinux用です。

以下の手順は、参考にさせて頂いた記事、ニフティクラウドのCentOS 6.2でSymantec Endpoint Protectionを使うとほぼ同じです。
一部、私がハマったところを追記してあります。

1)yumで必要なモジュールをインストール

yum install libstdc++ libstdc++.i686

2)rpmをインストール

rpm -Uvh sav*i386.rpm
rpm -Uvh savap-*.x86_64.rpm

3)いったん起動

/etc/init.d/rtvscand start

※私の開発環境では、ここではrtvscandがタイムアウトしてFAILEDでした。よってFAILEDでも気にせず次へ進みます。

4)OS判定部を書き換え

/etc/init.d/autoprotectの102行目前後のOS判定部に、以下の行を追記

*CentOS\ release\ 6*) osprod=ES osver=6 ;;

5)起動

※ここで手順3を実施したところ、OKになりました。

その後、autoprotectを起動

/etc/init.d/autoprotect start
/etc/init.d/autoprotect status

6)全てOKになった後、再起動

sync; sync; sync;
shutdown -r now

7)動作確認⇒完了!

アプリ側

つくりはhtml5で、ネイティブアプリに変換をかける方式で検討。
ゲームとかじゃないので、高度な実装は不要なのでhtml5で。
4画面分くらい書けばOKなので、画面数は少ない。
内部処理はサーバ側処理とあわせて構築する必要がある。
課金できるソリューションを調べていたら、appmobiというものを知る。
今はまだ調査してる段階だけど、課金周りの管理もやってくれるらしい。
使えたらいいなぁ。英語だから解読に時間がかかりそう。

背景

ウェブサービスを作りたくなった。ジャストアイディアレベル。
会社でAWSの勉強中。あとphpも。
うーん、でもapacheとかnginxとか、そもそもサーバ自体、チューニングできる気がしない。
でもチューニングしないと負荷がかかるので、お金かかりそう。
いろいろ調べたら、herokuでもphpが動くことがわかった。
よし、では、herokuに任せよう。

Project Euler Problem 93

#define put(now) if(now > 0 && now < N && floor(now) == now){list[(int)now] = (int)now; }
int search(double x[4],int N){
	int *list = new int[N];
	fill(list, list+N, 0);
	int ans = 0, a=0;

	for(int i=0;i<4;i++)
	for(int j=0;j<4;j++)
	for(int k=0;k<4;k++){
		if(i == j) continue;
		double now1 = calc(x[i],x[j],k);
		for(int l=0;l<4;l++)
		for(int m=0;m<4;m++)
		for(int n=0;n<4;n++){
			if(l==m || i==l || i==m || j==l || j==m) continue;
			double now2 = calc(x[l],x[m],n); // l&m
			double now3 = calc(now1,x[l],n); // (i&j)&l
			double now4 = calc(x[l],now1,n); // l&(i&j)
			for(int o=0;o<4;o++){
					put(calc(now1, now2, o)); // (i&j)&(l&m)
					put(calc(now3, x[m], o)); // ((i&j)&l)&m
					put(calc(x[m], now3, o)); // m&((i&j)&l)
					put(calc(now4, x[m], o)); // (l&(i&j))&m
					put(calc(x[m], now4, o)); // m&(l&(i&j))
			}
		}
	}

	while(++ans<N)
		if(list[ans] != ans)
			break;

	delete[] list;
	return ans-1;
}

int main(){
	uLLint N = 5*4*3*2*64+1;
	int big = 0;
	int X = 10;
	for(double i=1;i<X;i++)
	for(double j=i+1;j<X;j++)
	for(double k=j+1;k<X;k++)
	for(double l=k+1;l<X;l++){
		double x[4] = {i,j,k,l};
		int ans = search(x, N);
		if(big < ans){
			big = ans;
			printf("[%.0f %.0f %.0f %.0f] %d\n",i,j,k,l, ans);
		}
	}
	cout << big << endl;
	return 0;
}