2012年5月26日

WebSocketについて押さえておきたいもう一つの視点


下の記事を読んで「やっぱりMeteorはすごいな~!」と思った。
体感!JavaScriptで超速アプリケーション開発 -Meteor完全解説:第1回 Meteorをはじめよう|gihyo.jp
と同時に、最近よく目にする様になった WebSocket について気になりだした。

そこで色々検索して解説記事や入門記事を読んでみた。

http://warmcat.com/_wp/2010/11/01/libwebsockets-html5-websocket-server-library-in-c/


多くの記事はAjax, Cometなどの延長・改良版としてのWebSocketという視点で書かれていたのだけれども、その中で少し視点の異なる次の3つの記事が目に留まった。

Tender Surrender: WebSocketのバイナリメッセージを試したら、ウェブの未来が垣間見えた
『今後インターネットでスピードを追求していく上で、WebSocketはなくてはならない存在になるでしょう。リアルタイムなサービスを作る必要がなくても使われるテクノロジーになります。理由は大きく2つ。WebSocketの持つオーバーヘッドの削減と、データの圧縮という特徴です。』
『僕はインターネット上でWebSocketを使って流れるデータが、将来的に全部バイナリーになる可能性すらあるのではないかと思っています。』
『少し大げさに言うと、これはウェブにおけるパラダイムシフトになり得ます。ウェブで使われるプロトコルがHTTPからWebSocketに乗る何かしらのプロトコルに置き換わる可能性は、全くないとは言い切れないのではないでしょうか。』

telnet over WebSocketを作ってみた&その意味
『WebSocketが新しいバージョンとなりbinary frameが扱えるようになったことで、今までTCPで実現されていたすべてのプロトコルとお話しできるようになります。今まで悩まされていたNAT, Firewallなどを超えて、様々なサーバと繋いでみるのも楽しいかもしれません。』

こてさきAjax:WebSocketから、これからのWebを予想してみる
『結論から先に言うと、「WebSocketはWeb上に、個々のVPNを作る技術である」と僕は思っています』
『こうなってくると、Webは、単にWebページ(コンテンツ)にアクセスするための仕組みとは言えなくなります。むしろ、Webが基本のプラットフォームとなり、そこの上に個別のポリシーのネットワークが形成される。そして、ユーザーは、それらのネットワーク上を自由に行き来するという世界観で捉えるほうが妥当であると僕には感じられます。』

これら3つの記事を読むと、WebSocketとは単なる「より良いAjax」ではなく、インターネットの世界にもっと大きなパラダイムシフトをもたらす可能性を持ったものだと言う事が言えそうだ。

これは少ないオーバーヘッドでバイナリデータを扱える様になった事によるところが大きい。これによって今現在はTCP/UDPのポート番号で区別されている通信を全てTCPの80番と443番ポートで(FirewallやNATを越えて)流す事が可能になる。(WebSocketを使ったVNCクライアントはその良い例だろう。) これが普及すればアプリケーションの区別はもっぱらWebSocket内のサブプロトコルによって行われる様になるかも知れない。

つまり こてさきAjax さんが予想されている様にネットワークのレイヤが一つ上がった形でアプリケーションが動くという事になる。

それがもっと具体的にどういう意味を持つのかはまだはっきりとイメージ出来ないけれど、何だか楽しいことになりそうな気はしている。









.

2012年5月5日

Sprintの携帯とGoogle Voiceが統合されてどうなったか

去年の5月頃から、Sprintの携帯の電話番号がGoogle Voiceでそのまま使える様になった。GoogleとSprintが提携したので、Sprint側のバックエンドがGoolge Voiceに直結された様なイメージだ。これは非常に便利な機能で重宝している。
ASCII.jp:Google Voiceと米Sprint端末の統合が可能に
GoogleとSprintがGoogle Voice導入で提携、Sprint版Nexus S販売も - ITpro

全ての発着信履歴、テキストメッセージやボイスメールにWebからアクセス出来る。
テキストメッセージやボイスメールを自動的に自分のEメールに転送する事も出来る。 

ブラウザから自分の電話番号を使って発信する事も出来る。
PCで通話する事も携帯で通話する事も可能。

特に、テキストメッセージを受け取った時にすぐにEメールに転送されて来るので、携帯を使わずそのままPCから返信出来てしまうのが気に入っている。


端末から電話をかける時は、Google Voiceを経由するのか従来通りSprintの電話網を通すのかを選択出来る。(もちろん前もって設定で決める事も出来る。)
通常はSprintを使って、国際電話の時だけGoogle Voiceを使うという設定も可能だ。(Google Voiceを通すと日本まで1分2セントで通話出来る。)

この機能のおかげでSprintの高い国際通話料金を払う必要が無くなった。

と、いい事づくめだったのだけれども、2日ほど前から問題が発生してしまった。


突然、端末から国際電話の発信が出来なくなってしまったのだ。
検索してみると5月2日から多くの人がこの問題で困っているらしい。

When trying to place a call via google voice i get: "this is not a valid number" 
Sprint Community: International calls - this is an invalid number, problem for Sprint users since 5/2/2012 - update?

国際電話の番号をダイヤルすると「This is not a valid number」という録音メッセージが返って来るだけだ。Google VoiceのWebサイトで発信履歴を見ると、記録されている電話番号が先頭の7文字までで切れている。

どうやらSprintとGoogleの間の連携が上手く行かなくなってしまっている様な感じだ。

それにしても、問題発生から2日も経っているので、きっと困っている人も多いだろうと思う。

携帯とGoogle Voiceが統合されて便利になったのは良いのだけれど、こういう問題は本当に困る。Googleがこれからもっと社会インフラ化して来るとしたら、もっと重大な問題が起こりそうな気がしてならない。









.



2012年5月3日

ASP.NET MVC 4 BetaでWebページを編集中にVisual Studioがフリーズする件

Visual Studio 2010 SP1 + ASP.NET MVC 4 Betaという環境でコピー&ペーストしようとするとIDEがフリーズしてしまうという現象に遭遇した。

再現手順は次の通り。

  1. 新規でASP.NET MVC4 Web Applicationプロジェクトを作成。

  2. テンプレートは「Empty」を選択

  3. Solution ExplorerでControllersを右クリックしてコントローラクラスを追加。

  4. 作成されたクラスのIndexメソッド上で右クリックしてViewを追加。

  5. Index.cshtmlファイルが作成され自動的にその編集画面が開くので、HTMLタグなどを適当に入力して、コピー&ペーストを実行。

  6. Visutal Studioがフリーズして、その後強制終了(再起動)してしまう!
  7. 場合によってはコピー&ペーストをしなくても編集中にフリーズする。

いろいろ検索して、唯一見つけた同様のケースの情報がこれだった。
VS 2010 freezes when pasting text into the editor | Microsoft Connect
一つの回避策として、.cshtmlファイルを開く際に右クリックして「Open With...」というメニューからデフォルトのRazer EditorではなくHTML Editorを選べばエラーが出ないとの情報が得られた。

確かにその通り、HTML Editorで開くと問題ない様だ。
でも毎回その操作をするのは面倒なのでなんとか解決したい。

まずはVS.NETの拡張機能を片っ端からDisableしたりUninstallしたりして試す。
それでもダメなので、ASP.NET MVC 4 Betaを再インストール。まだ直らないのでこの際MVC3, MVC2もアンインストール。

VS.NETのSP1もアンインストールした。すると今度はアンインストールに失敗してしまい、だんだん雲行きが怪しくなって来る。嫌なパターンだ。

結局、案の定Visual Studio 2010全体を最初から入れ直すはめになってしまった。
2010の再インストール後、SP1、MVC3, MVC4 Betaと順に再インストール。
その後気を取り直して、また上記の手順でMVC 4のプロジェクトを新規作成して試すと....

またまたフリーズ! 再インストールの苦労は一体何だったのか...。

と数時間に渡る格闘の末、ようやく解決策を見つけ出した。
その解決策とは...

『プロジェクトを新規作成した後、ALT + B, U または CTRL+Shift+B を押して一旦ビルドしておく事!』



これで万事OKだ。







.