ファイアーエムブレム外伝 Phase曲+α

1.オープニング

2.全体マップ~1章(ソフィアへ:アルムの旅立ち)

3.戦闘マップ1~戦闘MAP1-1(アルム1)

4.全体マップ~2章(セリカの旅立ち)

5.戦闘マップ3~戦闘MAP2-1(セリカ1)

6.全体マップ~3章(解放戦争:それぞれの道)

7.全体マップ~4章(悲しみの大地)

8.戦闘マップ~最終MAP BGM(プレイヤー側)

9.エンディング1

Posted in FE演奏動画 | Leave a comment

JBoss Netty2

JBoss Nettyを使ったHelloサーバを作成してみる。

  • 改行コードで区切られた各文字列をリクエストとする
  • リクエストが「quit」の場合は「Bye!」を返し、接続を閉じる
  • リクエストが「quit」以外の文字列の場合は、それを名前と見なして「Hello [名前]!」を返す
  • リクエストが空文字列の場合は「What?」を返す

パイプラインの設計

HelloServerHandler

下流のStringDecoderから文字列を受け取り、プロトコルに沿って生成したレスポンスを返す

import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;

public class HelloServerHandler {
	@Override
	public void messageRecieved(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
		// リクエストを取得する
		String request = (String) e.getMessage();

		// レスポンスを生成する
		String response;
		if (request.equals("quit")) {
			response = "Bye!";
		} else if (request.equals("quit")) {
			response = "Hello " + request + "!";
		} else {
			response = "What?";
		}

		// レスポンスに改行コードを付加して書き込む
		ChannelFuture future = e.getChannel().write(response + "\r\n");

		// リクエストが"quit"の場合はチャネルを閉じる
		if (request.equals("quit")) {
			future.addListener(ChannelFutureListener.CLOSE);
		}
	}
}
Posted in Java | Leave a comment

Ubuntu 10.04上でJBoss Application Server構築

JBOSS 5.1 on Ubuntu 10.04を参考に。

java-6-openjdkをSynapticからインストール

/usr/local/jbossの下にjboss-5.1.0.GA.zipを展開する。

JDKのパスが違うので下記指定。

JAVAPTH=${JAVAPTH:-"/usr/lib/jvm/java-6-openjdk/bin"}

127.0.0.1:8080にアクセス。

Posted in Java | Leave a comment

JBoss Netty1

はじめに

Javaで非同期I/Oプログラミングを行なうには、バージョン1.4から追加されたNIO(New I/O)を使用する。

NIOをラップした非同期フレームワーク「JBoss Netty」についてご紹介。

Javaでの同期I/O

Javaで同期I/Oを行なう場合、

java.ioパッケージの

  • InputStreamクラス
  • OutputStreamクラス
  • InputStreamReaderクラス
  • BufferedReaderクラス

または、java.netパッケージの

  • ServerSocketクラス
  • Socketクラス

を使う。

Javaでの非同期I/O

Javaで非同期I/Oを行なうには、Java1.4から実装されたjava.nioパッケージの

NIO API

を使う。

同期I/OとClock問題

同期I/Oを使ったサーバプログラム

public class SynchronousServer {
	public static void main(String[] args) throws Exception {
		// スレッドプールを作成する
		ExecutorService threadPool = Executors.newCachedThreadPool();
		// サーバソケットを作成し、8080番ポートにバインドする
		ServerSocket server = new ServerSocket(8080);
		while (true) {
			// クライアントの接続を受け付ける
			final Socket client = server.accept();
			// スレッドプールにクライアントの入出力処理を渡す
			threadPool.submit(new Runnable() {
				public void run() {
					// メソッド本体
					doSomeInputAndOutput(client);
				}
			});
		}
	}
}

シングルスレッドのままだと1度に1つのクライアントしか処理できないため、スレッドプールを使い、入出力処理をワーカスレッドに任せる。

スレッド数が1万を超えるとメモリ消費やコンテキストスイッチにパフォーマンス低下が著しく、サーバが不安定に。

同期I/Oのマルチスレッド方式がネックとなり、1台のサーバで大量の同時接続数を受け付けることが難しくなる。・・・C10K問題

非同期I/Oとイベント駆動モデル

NIOによる非同期型サーバプログラムの例

public class AsynchronousServer {
	public static void main(String[] args) throws Exeption {
		// サーバチャンネルを作成する
		ServerSocketChannel server = ServerSocketChannel.open();
		// ソケットを8080番ポートにバインドする
		server.socket().bind(new InetSocketAddress(8080));
		// チャネルをノンブロキングモードにする
		server.configureBlocking(false);
		// セレクタを作成する
		Selector selector = Selector.open();
		// セレクタを接続受け付け用に登録する
		server.register(selector, SelectionKey.OP_ACCEPT);

		while (true) {
			// I/O処理可能なチャネルを選択する
			selector.select();
			// I/O処理可能なチャネルのキー一覧を取得する
			Iterator keys = selectedKeys.iterator();
			while (keys.hasNext()) {
				SelectionKey key = keys.next();
				// 接続可能なキーの場合
				if (key.isAcceptable()) {
					// クライアントを受け付ける
					SocketChannel client = server.accept();
					if (client != null) {
						// チャネルをノンブロッキングモードにする
						client.configureClocking(false);
						// セレクタをクライアントからの読み込み用に登録する
						client.register(selector, SelectionKey.OP_READ);
					}
				}
				// 読み込み可能なキーの場合
				if (key.isReadable()) {
					// クライアントのチャネルを取得する
					SocketChannel client = (SocketChannel) key.channel();
					// クライアントの入出力処理を行なう
					doSomeAsyncInputAndOutput(client);
				}
				// キーを処理済みとして削除する
				keys.remove();
			}
		}
	}
}

非同期I/Oのソケット通信速度は同期I/Oに劣る。

Posted in Java | Leave a comment

Webplog中心で更新します

管理画面にアクセスするたびにWPのバージョンが上がる感じでした。。

サイトを放置するくらいだったら閉じたほうがいいんじゃない?とかとも思いましたが、最近日常に追われたり、ギターに追われたりしていておざなりになっていたWebプログラミング系のメモ系を更新してきたいと思います。

もちろん日常のことも合間に挟みつつ。

これまでこのサイトはブログ的な使い方をしておらず、固定ページを大量に生成するという作りにしていましたが、その辺も改めてページの整理やデザインの刷新も行いたいと思います。

音楽やらヲタ話はこれまで通り、ニコ動やTwitter中心で、こっちはまじめ系話アーカイブな感じにしようかなと。

Posted in 日常 | Leave a comment

生活リズム

1年かけて行なっていた陰陽座コピーという名のギター特訓に一区切りついたので、このサイトの更新を頑張ろうとおもいます。

サイトコンテンツの整理と作りかけのFEデータの続きを作りましょうそうしましょう。

Posted in 日常 | Leave a comment

久々に

生存報告も兼ねて。こっちは放置でしたがあっちはコンスタントに続けていました。こんなに1つのこと持続できているのは初めてかもしれません。。。気づけばYoutubeとニコ動で一番陰陽座動画を量産しておりました。あとTwitterは相変わらずな感じで。

東京来てからというものの、いろいろなことがめまぐるしくて「もーっ」て感じです。本当はちょっと前に記事を書こうとしていたんですが、WordPressアップグレードしたら投稿がおかしくなって次のバージョンアップを待ってましたという。。。やっと投稿できるようになった。。

FEは今の陰陽座シリーズが完了してからボチボチって感じです。まだまだやりたい曲はあるんですが、優先順位の問題で。

このサイトの扱う内容をどうしましょうかね。

  • FE:再度着手できるとすれば今年の10月くらいから
  • ツーリング:頻度激減したものの、たまに行ってます。引き続きレポしたい
  • WEB:WEB+DB PRESS流し読みをもう少し改善しよう。Programingの項目を今後は充実させたい

という感じで、しばらく更新頻度落ちるものの、マイペースでやってきます。

Posted in 日常 | Leave a comment

水菜たっぷり肉うどん

柚子胡椒カラス!!

Posted in 日常 | Leave a comment

引っ越し

まさかまた東京砂漠に戻ることになるとは、、、、

ということで、来月引っ越しします?。現在物件吟味中。。。

ここ1ヶ月間くらいは怒涛の忙しさになりそうです。。。主に掃除と物の整理で。。目標は70%くらいのものは処分する感じで。

Posted in 日常 | Leave a comment

D-LUX4買いました


Posted in 日常 | Leave a comment