2013/04/24

コードで英語を勉強する方法

コードで英語を理解できるようにしてみた。
とりあえず5文型を覚えれるように。
英文法の勉強は眠くなるのに、これだと結構覚えやすい。
main();
    }
    
    /**
     * 文型について
     * http://blog.livedoor.jp/aritouch/archives/1470991.html
     * 
     * S : Subject (主語)
     * V : Verb (動詞)
     * O : Object (目的語)
     * C : Complement (補語)
     * M : Modifier (修飾語)
     */
    public function main()
    {
        $He = new Person();
        $You = new Person();
        $I = new Person();
        
        // SV // He runs in the park.
        echo $He->run();
        echo PHP_EOL;
        echo $He->run('in the peark');
        echo PHP_EOL;
        
        // SVC // You look happy.
        echo $You->look();
        echo PHP_EOL;
        echo $You->look('happy');
        echo PHP_EOL;
        
        // SVO // I have a book.
        echo $I->have();
        echo PHP_EOL;
        echo $I->have('a book');
        echo PHP_EOL;
        
        // SVOO // I gave her a doll.
        echo $I->give();
        echo PHP_EOL;
        echo $I->give('her');
        echo PHP_EOL;
        echo $I->give('her', 'a doll');
        echo PHP_EOL;
        
        // SVOC // I call the dog Pochi.
        echo $I->call();
        echo PHP_EOL;
        echo $I->call('the dog');
        echo PHP_EOL;
        echo $I->call('the dog', 'Pochi');
        echo PHP_EOL;
    }
}

/**
 * Personクラス
 */
class Person
{
    /**
     * TEST
     */
    public $_test = 'test';
    
    /**
     * TEST
     */
    public function getTest()
    {
        return $this->_test;
    }
    
    /**
     * run
     * 
     */
    public function run($adverb = null)
    {
        return (is_null($adverb)) ? 'run' 
            : sprintf('run %s', $adverb);
    }
    
    /**
     * look
     * 
     */
    public function look($complement = null)
    {
        return (is_null($complement)) ? 'false' 
            : sprintf('look %s', $complement); 
    }
    
    /**
     * have
     * 
     */
    public function have($object = null)
    {
        return (is_null($object)) ? 'false' 
            : sprintf('have %s', $object);
    }
    
    /**
     * give
     * 
     */
    public function give($object = null, $object2 = null)
    {
        return (is_null($object)) ? 'false' 
            : (is_null($object2)) ? 'false' 
            : sprintf('give %s %s', $object, $object2);
    }
    
    /**
     * call
     * 
     */
    public function call($object = null, $complement = null)
    {
        return (is_null($object)) ? 'false' 
            : (is_null($complement)) ? 'false' 
            : sprintf('call %s %s', $object, $complement);
    }
}

2013/04/23

google bloggerでソースコードを番号付きで表示する方法

CSSの参考
main();

function main() {
    define('MAIL_PATH', 'C:\Users\c3po\AppData\Roaming\Thunderbird\Profiles\j0w66vt1.default\Mail\pop.mail.yahoo.co.jp\Inbox.sbd');
    $urls = grepUrl();
    $conv = convHtml($urls);
    outPut($conv);
    exit;
}

function grepUrl()
{
    $preFile = file(MAIL_PATH. "\get_money");
    foreach ($preFile as $k => $v) {
        if (preg_match('/http:\/\/dietnavi.com\/click.php\?cid=[0-9]+&id=[0-9]+&sec=[0-9a-z]+/', $v, $match)) {
            $ret[] = $match[0];
        }
    }
    $uni = array_unique($ret);
    return $uni;
}

function convHtml($urls)
{
    foreach ($urls as $k => $url) {
        $url = preg_replace('/\n$/', '', $url);
        $convs[$k] = sprintf('click_%s
', $k, $url, $k);
    }
    array_unshift($convs, '');
    array_push($convs, '');
    return $convs;
}

function outPut($convs)
{
    $fp = fopen('conv.txt', 'w');
    foreach ($convs as $k => $url) {
        fwrite($fp, $url. PHP_EOL);
    }
    fclose($fp);
}

2013/04/22

平均、分散、標準偏差

データの特徴を1つの値から判断する方法(平均、分散、標準偏差)

データから度数分布表やヒストグラムを毎回作成するのは面倒なので、そんなことをしなくていいように、平均分散標準偏差がある。
  1. 平均
    平均は簡単だ。データの和をデータ数で割ればよい。
  2. 分散
    分散は各データが平均からどれくらい離れているか、散らばりやばらつきという数値である。
分散=(対象データ - 平均)の2乗の合計/データ数

  1. 標準偏差

分散=((対象データ - 平均)の2乗の合計/データ数)の平方根

2013/04/21

度数分布表

度数分布表のつくり方

  1. 最大値最小値を見つける
    データ群のなかでの最大値と最小値を見つける。
  2. 階級を決める
    最大値と最小値がわかれば、その範囲をいくつに区切るかを考えます。この区切りのことを階級という。
  3. 階級に入るデータの数を数える
    階級に入るデータの数を数えます。 階級に含まれるデータの個数を、度数という。
    階級の真ん中の値を階級値というらしい。

2013/04/20

Google Application Engineでソースコードをダウンロードする方法

GAEの再利用

cronの実行を使うためにGAEを再度使うことに決めた。 2年ぶりくらいに利用するが、ハードディスクが壊れて、 以前作っていたアプリのソースがローカルにない。。。 GAEで閲覧できないか調べていると、昔はアップロードはできても、 ソースの閲覧や、ダウンロードはできなかったことを思い出しました。。。 困って調べてると、機能改善されてるみたいです。

https://developers.google.com/appengine/docs/python/tools/uploadinganapp?hl=ja#DownloadingSourceCode appcfg.py download_app -A <your_app_id> -V <your_app_version> <output-dir> このコマンドでダウンロードできるんですね。

当時設定していたcronが、当たり前ですが、2年間絶え間なく動いていました。 当時無料でしたが、よく読むと一定の容量を超えたら課金されるようです。 cronが容量を超えるような処理をしてなくてよかった。 (超えても利用ができなくなるだけで、ユーザーの判断を待ってから課金されるようです。 huluのように無料期間終了後、課金が勝手に始まって驚くことはなさそうです。)

2013/04/19

データサイエンティストを目指す

データサイエンティストについて

  1. データサイエンティストのイメージ

    企業に所属してのデータサイエンティストのイメージは、 マーケティング知識を有しているITエンジニアだろうか。 マーケティング知識による予測を大量のデータで、 裏づけをとるといったことを生業にし、 経営判断の指標を作る人だとおもう。

  2. データサイエンティストの素養

    ビックデータを駆使し、データマイニングすることができ、 また、そのデータを活かすための統計指標の知識が必要であり、 その作業が苦にならない人だと思おう。 データベースや大量のログを扱うITエンジニアには その素養があるだろう。

  3. データサイエンティストに必要なスキル

    サーバの知識、Hadoopの知識、データベースの知識、 そういったデータをさばくためにプログラミングの知識は必要だろう。 どのようなプログラミング言語でもよさそうだが、 R言語やpythonが向いているようである。 (R言語は統計用の言語のようだし、pythonには統計ライブラリがあるらしい。)

  4. データサイエンティストのメリット

    • 企業内でシステム開発以外で、エンジニアリング力が活かせる。
    • 企業の利益に直接的に貢献することが可能である。
    • データ解析力は、自分の副業としても活かすことができる。
  5. データサイエンティストとして

    これからデータサイエンティストとしてやっていくと決めた上で、 現状足りないと思われる能力。

    • マーケティング知識
    • ビックデータの知識
    • 統計学の知識

2013/04/18

websocket javascript オンラインゲーム

node.js

【1】node.jsでの仮想通信

  • 【期待】node.jsで複数のサーバを同時に起動し、仮想的にクライアントサーバ環境を作る。

    1. クライアントサーバ環境での通信のテスト環境を作る。
    2. これまでのサーバ間でのやり取りを実際に行うまで結果が出ることが無い非効率な状況を改善できる。
    3. 擬似環境で何度もテストすることで、オペレーションミスの減少、バグの早期発見につながる。
    4. また、1テストの消化時間が早くなれば、多くのテストを実施できるようになり、システムの品質向上につながる。
  • これまでの経緯

    同じ環境を作るには、apache, tomcat, weblogicのようなサーバアプリをインストールする。

    • 複数サーバを立てるにしてもポート解放などが面倒である。
    • コンパイルされていて内部がなかなか見れることはない。
    • 複数サーバを立てることでマシンに高負荷がかかり、他の作業ができなくなる。
    • 結局は実サーバ(別PC)を使うことになる。

【2】node.jsでのwebsoket

従来のチャットアプリケーションを構築する場合 1. Aが投稿(messageをDBに保存) 2. Bが閲覧(messageDBを検索)

※この時Bがリロードせずに最新メッセージを取得するには、定期的(10秒間隔等)にDBを検索し、最新messageが投稿されていないかを確認する。(ポーリング)  

※ポーリングには送信側が送信データを持っていても受信側から問い合わせがあるまで待機となるため、タイムラグが発生する。
  • ロングポーリング
  • XMLHttpRequest

新しいチャットアプリケーション

  1. Aが投稿(messageを複数に送信し、履歴用にDBに登録)
  2. Bが閲覧(messageを受信)

    ※この時BはDBの応答を待たずにmessageを受信することになり、高速である。
    ※違いはポーリングでやってることを、コネクション貼りっぱなしにしてメッセージを投稿されたタイミングで全てのコネクションにメッセージ送信できる点です。
    

従来:コネクション接続→メッセージ取得→コネクション切断を繰り返し 現在:コネクション接続→メッセージ取得→待機 を繰り返し

node.jsの凄いところ - サーバからクライアントに対してプッシュができる。 - 専用のプロトコルでコネクションを維持し続けれる。

自動でWEBブラウザテストを実行してみる!(selenium + eclipse + java)

1.eclipseの準備 2.selenium IDE(katalon recoder by firefox)で動作記録する。 3.javaファイルにエクスポートする。 4.eclipseで実行