Pages

2012年3月30日金曜日

JavaScriptメモ その2

JavaScript(以下js)のメモ その2.


・encodeURI(String)…引数のASCII文字以外をエスケープしたものに変換.
ex. var uri = encodeUIR("http://localhost/sample.html?param=ほととぎす");
result uri→ http://localhost/sample.html?param=%E3%81%BB%E3%81%A8%E3%81%A8%E3%81%8E%E3%81%99


・コンストラクタの作成
ex.
// Bookオブジェクトのコンストラクタ
function Book(title, price){
this.title=title;
this.price=price;
this.withtax = function(){return this.price*1.05};
}

books =[];
books[0] = new Book("なぞなぞ", 500);
books[1] = new Book("攻略本", 1200);
for(var i=0; i console.log("タイトル: "+ books[i].title);
console.log("値段: "+ books[i].withtax());
}

ゲーミフィケーションについて

今回はゲーミフィケーションについて書きます.

ゲーミフィケーションという言葉は聞いたことがあるでしょうか?
私が初めてゲーミフィケーションという言葉を聞いたのは,NHKが放送した「世界ゲーム革命」という番組の中でした.
最近,このゲーミフィケーションを意識するようになりました.

・ゲーミフィケーションとは何か?
簡単に説明すると,ゲームの要素をゲーム以外の活動に利用することです[1].
ちょっと良く分かんないですね.
もう少し掘り下げていきましょう.

・ゲームの要素とは何か?
私が思いつくゲームの要素とは,キャラクターの上達,レベルアップ,経験値,対戦…とかでしょうか.
ゲームソフトで言うと,牧場物語では農場の発展,ポケモンでは進化,FPSでは共同ミッションなどもゲームの要素が含まれてそうです.

・具体的にゲーミフィケーションってどんなものなの?
「Nike+」の結果表示画面
ゲームの要素をゲーム以外の活動に利用する例として,Nike+を紹介します.
Nike+とは,ナイキが提供するランニング管理サービスのことです.
Nike+に登録すると,自身が走った距離や時間、消費カロリーなどの情報が蓄積されます.
これらをグラフにして見ることも可能です.
いわゆるライフログサービスですね.
更にNike+には,蓄積したデータを使用して他人と競走することができます.
私はまだ他人と競走する機能を使用していませんが,競走グループの中でビリになると「It」と呼ばれる称号がつくようです.(Itでどういう意味なんだろう……)
このItの称号を外すために,他人より走るようになるとか.
競走ではなくて競争ですね(笑).
このNike+サービスの中にあるゲーム要素は,自身の走行データをいつでも閲覧できること,データを使用して他人と競争できることでしょうか.
私もNike+サービスを使い始めたのですが,一人で走るより面白い点がいくつか発見したので,別の記事で紹介したいと思います.

・ゲーミフィケーションを使うとどうなるの?
ある活動にゲームの要素の組み込みことで,ユーザの内発的動機づけ(ユーザ自身が活動に対する動機づけを行うこと)を引き起こすことができます.
しかし,全ての活動に対してゲームの要素を組み込めるわけではありません.

・まとめ
ゲーミフィケーションをあらゆる活動に適用することで,ユーザは内発的動機づけを行いやすくなります.
この内発的動機付けを行うと,ユーザは活動に対して飽きにくくなります.
すると,ユーザの活動時間が増えます.
単純ですよね?
しかし,ユーザの活動時間が増やす方法は,いろんな人が欲しているのではないでしょうか?

今回の記事は,井上明人さんが 執筆したゲーミフィケーション―<ゲーム>がビジネスを変えるを拝読して書きました.
上記の本は,ゲーミフィケーションという概念を分かりやすく説明しているので,ゲーミフィケーションを知りたい方にはおすすめです.
私の稚拙な文章では味わえないような,ゲーミフィケーションとの出会いがあると思います.
他には,4gamerにもゲーミフィケーションに関する記事があります.

それでは、また.


----------
[1]井上明人: ゲーミフィケーション―<ゲーム>がビジネスを変える, NHK出版(2012-1-25)

2012年3月27日火曜日

JavaScriptメモ その1

最近,Webアプリケーションを作成するためにjavascriptに触れることが多くなってきました.
今まではJava言語をメインで使用してきたため,javascriptのメソッドや変数の管理がとても難しく感じます.
(500行を超えると,javascirptファイルを封印したくなります……)

何か打開策は無いものか……と解決法を探したところ,
わかった気になるjs開発手法を見つけたため参考にさせて頂きました.

javascirptファイルを結合させるなど,発想が面白いと思ったのは私がjavascirpt初心者だからですかね?
ちょっとjavascirptに関して知識がついた気がします.
根本的な解決にはなってない気がするけど…….

ま、いーよね.

2012年3月17日土曜日

GoogleAppEngineのローカルサーバーにLAN内からアクセス

ちょっと詰まったのでメモ!

GAEのローカルサーバーにLAN内からアクセスしようとしたところ,うまく通信できず.
Tomcatのローカルサーバにはアクセスできたため,ファイアウォールではなくGAEの問題と判断して検索を行ったところ
EclipseのGAEローカルサーバーにlocalhost以外からアクセスする方法を発見.
上記のサイトに書かれている通り,http://[ローカルIP]:8888/にアクセスするためには,Eclipseから実行→実行の構成→引数から--port=8888 --address=[ローカルIP] [workspace]を指定して実行.
これでLAN内からのアクセスが可能になる.

2011年11月13日日曜日

Androidアプリ開発環境

Androidアプリケーションの開発に興味が出たので,Androidアプリケーションの開発環境を構築しました.

Androidの開発環境を導入する手順[1][2]は要約すると以下の通りです.

① "JRE"のインストール(eclipse実行用)
② "Eclipse IDE for Java EE Developers"をダウンロード
③ Eclipseに"ADT Plugin"をインストール
④ "Android SDK"をダウンロード
⑤ "Android NDK"をダウンロード(使わない人は導入しなくて良い)

Androidの開発環境の導入が終わると,EclipseからAndroidエミュレータを起動することができます.

しかし,このエミュレータの起動が遅い!
起動コストが高すぎる!

この対処法として,VirtualBoxにAndroidOSをインストールして起動コストを下げる方法[3]を実行しました.
これの導入には少し手間取ったので,次の投稿に導入の詳しい説明を記述しようと思います.


[参考資料]
[1] 安生真, 柴田文彦, 藤枝崇史: 初歩からわかるAndroid最新プログラミング, インプレスジャパン(2010)
[2] マンガで分かるAndroid開発環境構築方法: http://crocro.com/write/android/wiki.cgi?p=%A5%DE%A5%F3%A5%AC%A4%C7%CA%AC%A4%AB%A4%EBAndroid%B3%AB%C8%AF%B4%C4%B6%AD%B9%BD%C3%DB%CA%FD%CB%A1
[3] 仮想環境へAndroidをインストールしてエミュレートを高速化する: http://sites.google.com/site/technoute/android/emulator/virtualbox

タイトル・デザインを変更

タイトルとデザインを変更しました.

デザインは「Bloggerのお勧め」をポチポチクリックしていった所,こんな感じになりました.
Twitterとかアクセスカウンターのガジェットは消えたけど\(^o^)/

問題無し.

2011年8月9日火曜日

モンティ・ホール問題

確率の本を読んでいるとモンティ・ホール問題に出会ったので,暇つぶしにプログラムを作ってみる.

モンティ・ホール問題 ~進行の手順~
①三つの扉が用意される.このうち,一つが当たり.残りの二つがはずれである.
②あなたが一つの扉を選ぶ.
③司会者が残りの二つの扉のうち,はずれの扉を開ける.
④この時点で,あなたに扉を選び直す権限を与えられる.
⑤「あなたは扉を選び直しますか?」

こんな感じの問題.


Javaで作成.
import java.util.Random;

public class MontyHall {

    boolean chengedoor;
    int loopcount;
    int success = 0;
    Random rand= new Random();

    MontyHall(boolean changedoor, int loopcount){
        this.chengedoor = changedoor;
        this.loopcount = loopcount;

        execute();
        printResult();
    }

    private void execute(){
        for(int i=0 ; i<this.loopcount ; i++){
            //答えをセット
            int answerNo = this.rand.nextInt(3);

            //ユーザが選択
            int userNo = this.rand.nextInt(3);

            //司会者が一つ選ぶ(答えの扉以外)
            int obserNo = -1;
            if(answerNo == userNo){
                int r = this.rand.nextInt(2);
                switch(answerNo){
                case 0:
                    if(r==0) obserNo=1;
                    else obserNo=2;
                    break;
                case 1:
                    if(r==0) obserNo=0;
                    else obserNo=2;
                    break;
                case 2:
                    if(r==0) obserNo=0;
                    else obserNo=1;
                    break;
                }
            }
            else{
                obserNo = 3-(answerNo+userNo);
            }

            //回答チェンジ!
            if(this.chengedoor)
                userNo = 3-(userNo+obserNo);

            // 答え合わせ
            if(userNo == answerNo)
                this.success++;
        }
    }

    private void printResult() {
        String type = "";
        double sucper = (this.success / (double)this.loopcount)*100;
        if(this.chengedoor){
            type="Change! ";
        }
        else{
            type="NoChange";
        }
        System.out.println(type+":"+sucper+"%");
    }

    public static void main(String args[]){
        int loopcount = 100000;
        new MontyHall(true,loopcount);
        new MontyHall(false,loopcount);
    }

}

上記の通り,10万回試行してみる.
結果は…

Change! :66.982%
NoChange:33.283%

この通り.
当たりの扉を選びたいならChange!