ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

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/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/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/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でのコミュニケーション連携
      • 映像情報の方が毎日利用しようという気が起きる
      • キャラビジネスに
      • 情報集約

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

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