2013/12/24

学習方法

スーパーエンジニアになるには、単調な日々を送ってたらダメだと思う。
同じような日々を送るとしても明確な目標がないから得られた実感もないし、このままではダメなのだと思う。

2013/09/21

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

2013/04/17

websocket javascript


websocketとは、リアルタイム性のあるサービスを構築するために必要な技術の一つです。
通常のHTTP通信であればクライアントからのリクエストなしにサーバは応答しませんが、websocketを使うことで
クライアントとサーバ間で双方向の通信が可能となります。
Websocketを利用するにはNode.jsでWebSocketファンクションを利用することで簡単に実装でき、リアルタイム
アプリケーションが構築できます。また、phpによる実装でもWebSocketを利用できるようになったようです。

websocketはもともとHTML5の一機能として仕様の作成が進められていましたが、現在は切り離されて単独での
規格化が進められています。websocketもHTML5同様、ブラウザに依存していて、現在は利用できるブラウザが限られて
いるようです。

WEBアプリケーションはサーバへの負荷との戦いだと言えますが、その負荷の大部分はユーザのアクセス負荷だと
言えます。アクセス負荷を下げた上に、サービス機能を損なわないために必要なのはクライアントサイドのPCにも
処理負荷を分散させようという考え方だと思います。javascriptを多用した場合、負荷がクライアントPCに依存
しすぎて表示が遅くなったりしますが、サーバマシンの負荷が減り、処理は高速になります。この辺りはバランスだと
思いますが、サーバを増やす以外の負荷分散のアプローチとしては一考の価値があると思います。

2013/04/16

Jenkins 導入事例


Jenkins
John Ferguson Smart

継続的インテグレーションのCIツールの導入で成功している企業は、最初から戦略的に導入を計画していた訳では
なく、実験的な導入からだんだんスケールを大きくして実際のプロジェクトでも利用できるまでにしていったという
事例が多いです。これは、導入を急いだとしても、それを利用する人のスキルが追い付かないことが理由だと思います。
ツールが進化することは良いことですが、使う人の進化も必要なため、共に進化していくことが必要です。
また、実験的な段階ではいくらでも失敗ができるというメリットがあるので、できるだけ本番環境に近い実験環境の
整備は特に必要なことだと思います。

jenkinsはプロジェクト管理のマスターノードのみではなく、それぞれのローカル環境にも配備する必要があると
思います。コミット前にあらかじめCIによるテストの自動実行をしておけば、不要なコミットも減らせるし、
デグレーションも減らせると思います。

リリース以降にも多くの修正を必要とする場合、不具合の早期発見が急務になると思うので、アプリケーションを
自動でテストする環境を作って、コンピュータに常にチェックをさせれるシステムを作る必要があると思います。

2013/04/15

機械学習ライブラリ Mahout Hadoop

機械学習におけるHadoopの利用

従来のデータ処理

  1. WEBサーバで収集したデータをDBへ集積
  2. DBのデータを元に分析サーバ上でプログラムが解析処理
  3. 分析結果を保持
  4. クライアントへ表示

高速化、機械学習、データ精度を加味した処理

  1. WEBサーバで集積したデータをクラウドストレージのKVSへ集積
  2. 解析、分析プログラムをHADOOPで分散処理
  3. 分析結果をクラウドストレージで保持
  4. WEBサーバでクラウドのKVSから結果を取得
  5. クライアントへ表示

ビッグデータになった場合、従来のRDBSでは処理完了までの時間が長くかかってしまう。


分散処理をしない場合

昨今のCPUの進化により処理速度は速くなっているが、 結局、RDBSのI/Oで時間がかかってしまうため、 従来のRDBSではCPUの処理性能を十分に発揮できない。

HADOOPなら

複数台のマシンに処理を分散させることができるため、 I/Oの時間のボトルネックは解消される。。。とのことだが、 正直どういうことかがまだわからない。。。

2013/04/14

機械学習ライブラリ Mahout

課題を解決するプログラムを開発するのではなく、解決するための方法を学習するプログラムを開発する。

機械学習が利用できるケース

  • Recomendation
  • ニュースのグループ化
  • スパムメールの判別

Hadoopとの関連

  1. データが多くなると精度が高まる
  2. データが多くなると処理速度が遅くなる

新しい案件をスクラッチ開発する機会は減っている。 勝手に生成される機械学習に注目が集まっている。

次なる難問は,すべての商品の組み合わせに対してこうした判断を行う必要があるということです。 商品が1万点あれば,組み合わせは約5,000万通りにもなります。10万点あれば,約50億通り。 一緒に売れたことのある組み合わせのみ考えたとしても,膨大な件数になるでしょう。 サービスとして実現するには,これらを「現実的な時間で計算」できなければなりません。 機械学習はこれらを,具体的には以下のような問題を解決します。

  • 一つ一つは人間には簡単。コンピュータには難しい
  • 複雑すぎて,隠された規則性を見出せない
  • データが多すぎて,処理が終わらない

中でも線形代数(行列)と解析(微積分) は必須です。 数学:物理を学び楽しむために

モデル

機械学習でもっとも重要なことは,「解決したい問題を数値化する方法」です。 これを「モデル」と言います。 「モデル」があって初めてコンピュータが問題を解く(判断する)ことができる状態になります。 そして,問題を解く精度や性能は,この「モデル」の良し悪しで大部分決まってしまいます。

2013/04/13

rsyncについて

rsyncについて

rsyncは、ネットワーク経由のコピーも可能なファイル・ディレクトリ同期ツールで、 コマンドひとつでディレクトリツリーを一気に転送できるほか、 差分のみの転送やコピー対象の条件指定といった多彩な機能を搭載しています。

特徴

  • 特別な設定や管理情報などが必要なく、手軽に使える。
  • SSHを利用することでセキュアなファイル転送を実現する。
  • 転送条件などをきめ細かく指定できる。
  • コマンドラインツールなので、自動化・バッチ処理にも最適。
  • デーモンとして起動することで、匿名アクセスにも対応可能。
  • Linux、Cygwinでも標準搭載されている。
  • パーミッション変更のオプションがある。

他の同期手段との比較

[FTPのデメリット]

  • 通信が暗号化されない。
  • ファイル内容が平分でネットワークを流れる。(セキュリティ面で最悪)
  • HTMLはどうせ公開するのでOKだが、PHP等プログラムコードや、configはダメ

[SCP]

  • 転送中のデータが暗号化され、FTPよりセキュア
  • OpenSSHがインストールされている必要がある(Linuxには標準で入っている)

[SVN]

[rsync]

  • SSHリモートシェル経由で通信可能なためFTPよりセキュア

scpとrsyncの違い

scpは転送先サーバに同名ファイルがあると そのファイルをopenして転送開始する。 そのため、 転送最中にファイルを参照すると 中途半端な内容を読込んでしまう危険性がある。 また転送が途中で中断されても 転送先のファイル内容は戻らないようだ。 これはつまり、 scpで転送途中にCtrl + Cなどで中断すると 転送先のファイルが破損する可能性があることを意味する。

rsyncは、ファイル転送時は一時ファイルに対してデータを書き出し、 転送が完了してからmvするため、上記のような心配はない。

rsyncはファイルの保全性を確保できるという点ではscpより優れている。

  1. ファイルのチェックサムを比較して異なる箇所のみ送信
  2. そのためファイルの差分のみを転送し、ネットワークに対する負荷も少ない。
  3. ファイルのサイズや更新日付を参照
  4. そのため更新されているファイルのみを転送するので非常に効率がよい。

[rsync注意点]

rsyncは送信元ディレクトリの最後に/(スラッシュ)を付けるかどうかで転送の挙動が変わる。

rsync /home/sample/ server1:/home/ rsync /home/sample server1:/home/

ほとんど同じようだが、上段のrsyncではserver1の/home/の中に/home/sample/ 配下のファイルを転送する。つまり/home/sampleというディレクトリは作成しない。 しかし、下段の方は/home/sampleというディレクトリを作ってその中にファイルを転送する。

rsyncには-nオプションを指定すると、転送されるファイルを事前に確認できる。 転送前に-nオプションで確認する癖をつけるとコマンドに間違いがあっても事前に気づける。 また-excludeオプションで転送しないファイルを意図的に指定することができる。 転送に無駄なファイルや転送してはまずいファイルなどはこのオプションで除外できる。

いまやrsyncの情報は豊富にあるが、定番であろうオプションを以下に纏めておく。

  • -r: ディレクトリを再起的に処理する
  • -l: シンボリックリングをシンボリックリングとしてコピーする
  • -p: パーミッションを維持する
  • -t: タイムスタンプを維持する
  • -g: グループを維持する
  • -o: オーナーを維持する
  • -v: 転送状況を詳細表示する

2013/04/12

screenコマンド

screen, script, コマンド

目的

  • 作業効率を常に改善する→定期的に見直すことで思いこみや無知による作業ミスや非効率なやり方をなくしていく

なぜ必要か

  • 同じ作業の時間短縮や、効率UPを図るため

ディレクトリスタック機能

  • cd のように単に移動するだけでなく、前のdirをスタックに積む

    • pushd
      • pushd +2
    • popd
  • 複数のdir間を移動

    • よく使うものにaliasを貼る

scriptコマンド

作業記録

$script /tmp/script.log $exit(終了) $script -t $scriptreplay(再現)

rlwrap:history

lv:text viewer

+more (後方スクロール×、改良→Ctrl+B) +less +jless +lvはlessのパッチではなく、オリジナル

これらを見直してみる。

awk

→grep, cntと違うところはawkは独立したスクリプト言語 →コマンドではなく、awkスクリプト・インタプリタである。 →シンプルなので、perlより習得難易度が低い上に同程度に高度な処理も可能である。 $ awk '{print}' ./phperror.log == $ awk '{print $0}' ./phperror.log $ awk '{print $1}' ./phperror.log $ awk '{print "test"}' ./phperror.log $ awk -F":" '{print $1}' ./phperror.log (区切り) $ awk -F"] " '{print "sqllog\t:\t" $2}' ./phperror.log | less

sed

$ ls -lrt | sed -e 's/[a-z]$/X/' $ awk -F"] " '{print "sqllog\t:\t" $2}' ./php_error.log | sed -e 's/SELECT/TEST/' | less

2013/04/11

ソーシャルコーディング

ソーシャルコーディングとは

  • ソースを誰もが変更する権利を得て、
  • 誰もが自由にソースを変更
  • これまでのソフトウェア開発と一線を画し、限られた開発者以外でもソースをいじれる
  • ソフトウェア開発のスピード感がUPされる
  • ソースコード改変の民主化

職業プログラマこそソーシャルコーディングすべき

人材の流動性が高まっているため、職業プログラマがこれまでに作ったものを把握し、 最新情報の取得、多様な文化の取得のためにソーシャルコーディングは注目されている。

採用担当者視点からどちらがほしいプログラマか? - 今までに書いてきたコードを閲覧できるorできない。 - 最新のソフトウェアに精通しているorしていない。 - 多言語や異なるソフトウェアの多様な文化を理解しているorしていない。 後者にならないために、ソーシャルコーディングは必要。

世界を閉ざさず、多種多様な文化を見る

会社という閉ざされた世界の中でプログラミングをしていたのでは、 いつの間にか扱っている技術が陳腐化していることもありえる。 世界中で使われて、日々変更されるコード、設計、文化に目を向け、 よければ採用する眼力が必要。

コードを書けるプログラマが求められている

  • facebookのプロフィールのように自分が書いたソースをポートフォリオとすることができる。
  • 自分がどれほどのコードを書いたかを面接時に提出することができる。
  • 人間性を見るため意外に、ソースでどのレベルのプログラマかをアピールできる。

GitHubとは

集中型と分散型

Subversion=集中型 M 管理がシンプル D サーバに接続できない状態だと最新ソースコードが取得できない(svnサーバがダウンしたら終わり)

Git=分散型 M 複数リポジトリで管理できることになる D 管理ルールを明確に決めないと、管理が面倒になっていきやすい

※分散型で集中型のような管理もできる。

GitHubのメリット

これまでのGit歩スティングサービスでは、人にフォーカスできなかった。 Git+SNSのようなもので、有名なスーパーハッカーや、 有名企業のPGとも接点を持てる、または、その人の興味に触れることができる。

GitHub機能

  • Gitリポジトリ
  • organaization(企業用)
  • Issue(バグトラッキング機能)
  • Wiki
  • Pull Request(変更を相手に取り込んでもらう機能)

2013/04/10

レプリケーション


1.レプリケーションの設定と管理
 メリット
  ①MasterがダウンしたときにSlaveを利用することでダウン時間を短くできる。
  ②負荷分散
  ③SlaveサーバでのDBバックアップ
    (Slaveでバックアップをとることで、Masterで書き込みロックする必要がなくなる)

レプリケーションのプロセス
 ①最初にDBの内容を同期
 ②Masterサーバで実行された更新系のクエリをSlaveに渡す
 ③Slaveで同じクエリを実行させ、DBを同期させる。

Master側
 Master側で実行された更新系クエリ
 →バイナリログに蓄えられている
  →Slave側が接続してきたら、前回の接続からの変更分をSlave側に送信する。

Slave側
 →受け取ったクエリを一旦リレーログに蓄える
  →順次クエリを実行してDBを同期

※レプリケーション動作にはBinlogDump, I/O, SQLの3つのスレッドが連動して動作する。

----
Slaveサーバ、レプリケーション開始時、
 →Masterに接続して前回レプリケーションが完了時以降の変更クエリをMasterから受け取る
  →DBに反映

※このため、Slaveは常時Masterに接続しておかなくてもよい。
Slaveを再起動させたとしてもMasterに再接続すれば自動でDBが同期される。
ただし、変更分が大きくなると同期が完了するのに時間がかかる可能性がある。


設定手順(Master-Slave構成)
①Master側の設定の確認
 ※バイナリログを採取しておく必要がある。
  1.my.cnf log-bin確認
[mysqld]
 log-bin (binlog採取指定)
 server-id=1 (識別ID、任意、ユニーク)

②アカウントの作成
  1.Slave→Master接続するアカウントの権限(REPLICATION SLAVE権限保持)
(Master側で)
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.0.0.2 IDENTIFIED BY 'password';


③DBのバックアップ
  1.MasterデータをSlaveにコピー(DB書き込みロック)
(Master側で) mysql> FLUSH TABLES WITH READ LOCK;
  2.現在のbinlogの状態確認(ロック中に)
(Master側で) mysql> SHOW MASTER STATUS; +-----------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-----------------+----------+--------------+------------------+ | tank-bin.000001 | 79 | | | +-----------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
  3.現在のbinlogのファイル名とlog内の現在位置が表示されるので、記録しておく。
  (slaveを起動するとき必要)

 4.Master側のDBバックアップ
  (DBはロック中なのでtarで固める。)
(Master側で) # cd /var/lib/mysql/ <== MySQLのデータディレクトリへ移動 # tar cvf ~/friendDB.tar friendDB <== データベースをバックアップ
 5.DBバックアップ完了後、ロック解除
(Master側で) mysql> UNLOCK TABLES;

④DBのコピー
  1.③のバックアップをSlaveに持っていく。
 2.tarなどで持っていき展開
(Slave側で)
# cd /var/lib/mysql/
# tar xvf ~tomita/friendDB.tar
パーミッションを確認しておくこと。

⑤Slave側の設定
  1.Slave側のmy.cnfにserver-id設定
[mysqld] server-id=2 <== 識別用ID。任意の値。他のサーバーと重複しないようにする。
  2.slave mysqld再起動

⑥レプリケーションの開始
  1.Slave側の設定(Masterへ接続するためのパラメータ設定:host名, user名)
(Slave側で) mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.1', <== Masterのホスト名/IPアドレス MASTER_USER='repl', <== Master接続に使用するユーザー名 MASTER_PASSWORD='password', <== パスワード MASTER_LOG_FILE='tank-bin.000001', <==2.3で確認したFile MASTER_LOG_POS=79; <== 2.3 で確認したPosition
  2.レプリケーション開始
(Slave側で) mysql> START SLAVE;

※MasterとSlaveで文字コードの設定などが違っていたりすると、Masterに接続できなかったりするので注意。

060612 15:36:17 [ERROR] The slave I/O thread stops because master and slave have different values for the COLLATION_SERVER global variable. The values must be equal for replication to work
060612 15:36:17 [ERROR] Slave I/O thread exiting, read up to log 'tank-bin.000001', position 79


■関連コマンド
①start slave/stop slave (slave用)
  start slave でレプリケーションを開始し、stop slaveで停止
 バイナリログの状態表示

③show binlog events (Master用)
 バイナリログの中身表示

④show slave status (slave用)
 Slave情報表示




2013/04/09

Node.js

Node.js

  1. node.jsとは

    Node.jsとは、グーグルが開発したV8エンジン上で実行する環境であり、 従来のjavascriptをサーバサイドでも使用することができる。 従来のjavascriptはWebブラウザで画面を動的に見せるなどリッチクライアントでの利用が主流だった。 しかし、さまざまなライブラリの登場により、サーバサイドで利用することができるようになり、活躍の場を広げた。

  2. node.jsの効果

    1. クライアントサイドと同じ言語で開発ができ、開発効率が上がる。
    2. 実装が簡単
    3. イベントループを採用している。
  3. 会社の成長のためにどう活かすか

    • 現在の会社の状況
      1. サーバリソースが限られている。
      2. 開発要員が限られている。
      3. サイトをシンプルにしないといけない。
        • 機能を損なわずシンプルにする。

2013/04/08

Android プログラミング

Android プログラミング

  1. 道のり測定アプリについて

    • yahoo Opne Local Platform (YOLP)との連携
    • スマートフォンアプリとして位置情報を取り入れたサービスは外せない
      • どんな人も大なり小なり日常で最も使う情報だから
  2. Mapと事業について思ったこと

    • どこに何があるかを知ることで親近感が沸く
    • 周辺があらかじめわかることで、来客数も変わるだろう
    • 周辺の店の協力関係も得られるかもしれない
    • もしマップに掲載されると、所属意識も沸くかもしれない
    • 次なるサービスのプラットフォームになるかもしれない
      • マップからSNSでのコミュニケーション連携
      • 映像情報の方が毎日利用しようという気が起きる
      • キャラビジネスに
      • 情報集約

2013/04/07

リーンスタートアップ

  1. リーンスタートアップという考え方

    1. リーンスタートアップとは

      自身の体験をもとに成功するサービスを作り上げるためのプロセスをまとめた手法

    2. リーンスタートアップの特徴

      失敗することを前提に、失敗後いかに早く成功に辿り着くかをまとめたもの

    3. リーンスタートアップの実施方法

      1. 仮説の設定
      2. 仮説の検証
      3. 方向転換(ピボット)
  2. 共感する点

    1. なぜ共感するか?

      早期のサービス立ち上げは無駄な開発を防ぐために必要である。 誰にも使われないサービスを長時間作り続けることはむなしい。

    2. 同じ問題から発生した考え方

      • ユーザはなかなか集まらない
      • 一度は利用してくれるが2、3度利用したら離脱してしまう。
      • 収益が想定したよりも上がらない。
    3. 共感する事例

      DropBoxで取られた手法 →GoogleAdwordsを展開したが、集まらず →サービスの市場が存在しない時期からの宣伝は無意味との検証を得た →Digg,Redditなどでサービス説明の動画を流した →ユーザー増加

  3. 得られたもの(開発に活かせると思った点)

    1. (仮説)価値仮説シートと、成長仮説シート

      [価値仮説シート]

      (ユーザー)___は、(欲求)____たいが、(課題)___なので、(製品の特徴)___に価値がある。 レシピを探すユーザーは、今日のメニューを早く決めたいが、多くのレシピから決められないので、人気レシピが探せる検索機能に価値がある。

      [成長仮説シート]

      (ユーザー)___は、(きっかけ)____することで、(需要の発生)___するようになる。 (ユーザー)レシピを探すユーザーは、毎日のレシピ選び時間が短縮されることで、人気検索を使い続けるようになる。

    2. (検証)実際に開発する前に検証

      アナログなツールによってユーザーの反応を見る

    3. ピボットによる方向転換

      ピボットの方向転換は、検証結果による仮説の再構築です。 これによりユーザーのニーズに対する最適なサービスにたどり着ける。

  4. 得られたものを取り入れるための行動改善

    構築、測定、学習を繰り返す。 仮説立案と検証サイクルを明確にし、いかにすばやくそのサイクルを回すか

2013/04/06

Markdown記法を使ってBloggerへ記事を投稿してみる

Markdown記法を使ってBloggerへ記事を投稿してみる

  • 経緯 記事を書くときいちいちHTMLの表示を気にするのが面倒になったから。

  • 方法

    • オンラインツールを使う。

      Dillinger color themaやgithubからの読み込みもあり便利だが、 保存先がlocalかDropboxとなっている。 Evernoteか直接Bloggerへ保存できるとありがたいのだが。

    • コピペでHTMLを得たい場合

      Online markdown editor 即座にHTML previewができるため、コピペでbloggerに貼り付けれる。

Dillingerで作ったmarkdown sourceだけ保存しておき、 online markdown editorで変換しHTMLは即座にbloggerに投稿する。 ゆくゆくはEvernoteかBloggerだけで完結したい。

^_^

\^_^\

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

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