socket.io使ってみる

$ node socket_example.js
な具合でsocket.ioのサンプルを実行してみたら
Error: Cannot find module ‘socket.io’
というエラーが出て、おかしいなあと他のサンプルを動かしてみても同じエラー。
うーん、と思って、よくよく見てみたら
$ npm install socket.io
は example.js のファイルがあるディレクトリで実行しないといけないというオチでした。
ナンテコッタイ。

初代Xperia(SO-01B)をAndroid2.3.3にバージョンアップしてみる

monaca+html5+enchant.js+nendなゲームを作っていますが、初代Xperia(SO-01B)で確認してみたところ、なんか表示が変なことに・・・
これはいかんということでMonaca Debuggerを入れてみようとしたところ、Android2.1は未対応・・・それはそうですよね。
どうせ使ってないし、データ消えても問題ないのでいい機会だしAndroid2.3.3にバージョンアップしてみました。
下記サイトの手順通りにやったところ、すんなり成功しましたーよかったよかった。
https://sites.google.com/site/gitoshin/android/xperia-gb

enchant.ui.MutableText を拡張してみる

enchant.jsの enchant.ui.MutableText を拡張してみました。
・フォントテクスチャをコンストラクタで指定できるように。(コンストラクタで座標指定は削除)
・スケール(scaleX scaleY)に対応。
参考までにペタリ。

var MyMutableText = enchant.Class.create(enchant.Sprite, {
	/*!
		コンストラクタ
		@param	fontTexture			テクスチャ
		@param	fontTextureUnitSize	テクスチャの1文字のサイズ
	*/
    initialize: function(fontTexture, fontTextureUnitSize) {
        enchant.Sprite.call(this, 0, 0);
        this.fontSize		= fontTextureUnitSize ? fontTextureUnitSize : 16;		// テクスチャの1文字サイズ
        this.widthItemNum	= 16;	// テクスチャの1列に何文字格納されてるか
        this.x = 0;
        this.y = 0;
        this.m_fontTexture	= fontTexture;
        this._imageAge = Number.MAX_VALUE;
        this.text = '';
        if (arguments[2]) {
            this.row = Math.floor(arguments[2] / this.fontSize);
        }
    },
    /**
     * ラベルの内容を書き換える関数
     * @param txt
     */
    setText: function(txt) {
        var i, x, y, wNum, charCode, charPos;
        var	fontDstWidth	= this.fontSize * this.scaleX;
        var	fontDstHeight	= this.fontSize * this.scaleY;
        this._text = txt;
        var newWidth;
        if (!this.returnLength) {
            this.width = Math.min(fontDstWidth * this._text.length, enchant.Game.instance.width);
        } else {
            this.width = Math.min(this.returnLength * fontDstWidth, enchant.Game.instance.width);
        }
        this.height = fontDstHeight * (Math.ceil(this._text.length / this.row) || 1);
        // if image is to small or was to big for a long time create new image
        if(!this.image || this.width > this.image.width || this.height > this.image.height || this._imageAge > 300) {
            this.image = new enchant.Surface(this.width, this.height);
            this._imageAge = 0;
        } else if(this.width < this.image.width || this.height < this.image.height) {
            this._imageAge++;
        } else {
            this._imageAge = 0;
        }
        this.image.context.clearRect(0, 0, this.width, this.height);
        for (i = 0; i < txt.length; i++) {
            charCode = txt.charCodeAt(i);
            if (charCode >= 32 && charCode <= 127) {
                charPos = charCode - 32;
            } else {
                charPos = 0;
            }
            x = charPos % this.widthItemNum;
            y = (charPos / this.widthItemNum) | 0;
            this.image.draw(	this.m_fontTexture,						// テクスチャ
                				x * this.fontSize, y * this.fontSize,	// 入力xy
                				this.fontSize, this.fontSize,			// 入力wh
				                (i % this.row) * fontDstWidth, ((i / this.row) | 0) * fontDstHeight,	// 出力xy
				                fontDstWidth, fontDstHeight	);			// 出力wh
        }
    },
    /**
     * ラベルの内容
     * @type {String}
     */
    text: {
        get: function() {
            return this._text;
        },
        set: function(txt) {
            this.setText(txt);
        }
    },
    /**
     * @type {Number}
     */
    row: {
        get: function() {
            return this.returnLength || this.width / this.fontSize;
        },
        set: function(row) {
            this.returnLength = row;
            this.text = this.text;
        }
    }
});

Xperia Z SO-02E 上でenchant.jsのタッチがうまくとれない件

っsうーん、Xperia Z SO-02E 上で enchant.js v0.71 のタッチがうまくとれない症状で悩み中。
1回しかタッチしていないのに何故か touchstart が2回反応してしまいます。
他の端末だと大丈夫だったので、端末固有の問題だとは思うのですが、原因不明。

・・・というかそれ以前にmonaca+enchant.jsの環境で、Monaca Debbuger でXperia Z上でプレビューすると基本的になんか動作がおかしいので、まずそれから原因探らないとダメなんですけどね汗

ただ、ビルドしてインストールするとちゃんと動作するので、Monaca Debuggerの不具合なのかもと思い中…

■追記■
enchant.jsのGitHubでまさに同じ問題が報告されていました。
https://github.com/wise9/enchant.js/issues/200
既に解決しているようなので、修正されているenchant.jsファイルをゲットしてきました。
ただ、修正された箇所を見るとわかりますが、enchant.jsを差し替えるだけではダメで、

enchant.ENV.MOUSE_ENABLED	= false;

をCore生成の前に呼ぶ必要があります。
マウスとタッチのイベントがかぶって通知されることがあるとか。
・・・やったー直った!

this.scene にハマる

var MyEntity = enchant.Class.create( enchant.Entity, {
	initialize: function(scene) {
		enchant.Entity.call( this );
		// シーンを保存
		this.scene	= scene;
		// シーンに追加
		scene.addChild( this );
		// この時点で、this.scene は scene じゃなくなっている
		// addChildした時点でthis.scene が上書かれる
	}
});

こんな感じで、やると、this.scene は上書かれてしまいます。
いやいや、sceneメンバが存在していたとは、盲点でした。
これで結構悩んでしまいました(汗
ライブラリ側とかち合わないように、頭に m_ つけたりするのが良いかもしれませんね。

それ以前に、クラス内のメンバにthisでアクセスしなければならない事を結構わすれて、ダイレクトに書いちゃったりするんですが・・・

アプリを作って3000円!Monaca×nendアプリ開発キャンペーン

アプリを作って3000円!Monaca×nendアプリ開発キャンペーン | http://blog.asial.co.jp/1182

ちょうど何日か前、Monacaという、コーディングから最終ビルドまで全てブラウザ上で完結できるすばらしい無料サービスを発見して、これはいい!ということで、ちょっとしたAndroidゲームを制作しているところでした。

そんなところに、なんと良いタイミングでこのキャンペーン・・・!

Monacaの開発、運営を手がけているアシアルさんのブログでMonaca環境でnendを表示するエントリがあったので、広告もnendに決めたところでした。

自分はhtmlやJavascriptの知識はあまりありませんが、まあJavascriptならなんとかなるだろうとenchant.jsというお手軽なゲーム制作ライブラリを使用することにしました。

そんなこんなで、環境は monaca + html5 + enchant.js + nend で決定。

htmlやJavascriptに苦労しつつも現状なんとかゲームの大まかなシーンの流れとnendで広告表示のレイアウトまでうまくいきました。
htmlが理解しきれていないのでhtml+enchant.js+nendの環境で、広告とゲーム画面両方をきれいに表示させるのになかなか苦労しました。

この辺りは、自分の理解が深まった頃にでも、まとめて記事にしたいなと思っています。

Googleリーダーからの乗り換え候補メモ

■Feedly
http://feedly.com/‎
タグ○
Googleアカウントでフィードやスターもそのまま引き継げる。
現状最有力候補。

■Digg Reader
http://digg.com/reader

■NewsBlur
http://www.newsblur.com/
64フィードを超えると有料(年24ドル)

■AOL Reader
http://reader.aol.com/
まだβ版
Googleアカウントで手間なくフィードをインポート可能。
スターはインポートしてくれない。
フィードの並び替えが出来ない気がする。
触ってみた感じなかなか良さそうな雰囲気。

■NetVibes
http://www.netvibes.com/
雰囲気はよさげ。
スターなし。
タグなし?…でも別フォルダに同じフィード登録しても連動してるのでタグ的な動きはしている様子。

■Feedspot
http://www.feedspot.com/
Googleアカウントからフィードとスターも移行してくれる。
スター移行できるのは数少ないので貴重。

■The Old Reader
http://theoldreader.com/
タグ×

■Newsvibe
https://newsvi.be/
余計な機能は無い。シンプル

■Presser
http://feedpresser.com/

■Pulse News
https://www.pulse.me/

■Flipboard
http://flipboard.com/

mklink(ハードリンク、ジャンクション、シンボリックリンク)のメモ

Windowsでmklink使ってフォルダやファイルの(実体はコピーせずに、参照だけする)リンクを作成することができますが、『ハードリンク』『ジャンクション』『シンボリックリンク』の区別がいまいちついていなかったので、ちょっとまとめてみます。

『ハードリンク』
・コマンドは mklink /h …
・ファイルにしか適用できない
・同じドライブ内でしか使用できない
・全てのリンクが削除されない限り本体が削除されない
・DropBox等で使用すると不具合が出たりする?

『ジャンクション』
・コマンドは mklink /j …
・ドライブをまたいで使用可能
・フォルダにしか使用できない
・ネットワークドライブには使用できない
・シンボリックリンクの劣化版

『シンボリックリンク』
・コマンドは mklink /d …
・UNIXのシンボリックリンクと同等の機能を持つ
・ファイル、フォルダ、ネットワークドライブなど、ほとんどの対象に使用可能
・ジャンクションの強化版

ということなので、あまり深いことは考えず『シンボリックリンク』を使っておけば大丈夫という事で理解。

【追記】
perforceでワークスペース内にシンボリックリンクのフォルダが存在すると、p4 syncした際にアクセス関連のエラーが出ることがあった。
ジャンクションに切り替えた所問題が出なくなったので、ジャンクションの制限を無視できる場合はジャンクションを使用した方が良いかも。

Subversion 1.8リリース

http://sourceforge.jp/magazine/13/06/19/151500

Subversion 1.8がリリースされたようです。
仕事では1.7でさえまともに使っておらずずっと1.6でしたが、いつの間にか1.8になってしまいました。

さくらVPSサーバーを1.7にしようかと思っていましたが、いいタイミングなので1.8にしちゃうのが良さそうですね。

1.8では、マージ追跡やツリー競合検出など、ブランチやマージがよく発生するプロジェクト向けの機能が強化されたとのことです。
その他、データベースファイルサイズの削減、ベンチマークを行うためのコマンド追加、コマンド出力の改善など、メジャーバージョンアップなだけに色々と変更が入っているようです。

PS4、『399ドル』に決定

これは安い・・・!
原価はどんなもんなんでしょうか。気になる。

PS3はきっとCELLとかあったんであんなに高くなったんだと思いますが、今回は汎用のハードを使ってるので安く抑えられたんでしょうね。

対するマイクロソフト陣営のXboxOneは499ドルとのこと。
価格だけ見るとPS4優位ですが、XboxOneにはキネクト2が同梱されているので、最終的な金額は実はそんなに差がなかったりするのかもしれませんね。

両機種とも、日本での発売日、価格が気になります。