(続々)Windows7(x64)でWebsocketを試してみる

WindowsXP(32bit)でWebsocketを試してみる

色々と諦めて、本来の検証マシンではない方のマシンで検証を続行。

前回、gem installが上手くいかないのなんだのとあったけど
それは

gem install **** --platform mswin32

とかってプラットフォームを指定することで上手くいくことが多かった
(あくまで多かった、というだけで必ずしもそうでもなかったけど)

じゃぁ、ちょっとwebsocketのサンプルをということで
WebSocketでブラウザにプッシュ配信する - MessagePack-RPC+Rev-WebSocket
(http://d.hatena.ne.jp/viver/20100722/p1)と辺りを参考に、
githubからサンプルソースをダウンロードしてreadmeにしたがって実行してみる。

神様はまだ許してくれない。

c:/ruby187/lin/ruby/site-ruby/1.8/rubygems/dependency.rb:247:in 'to_specs': Could not find thin (>=1.2.7) amongst [...thin-1.2.11-x86-mswin3...]

thinが見つからない?
バージョンは1.2.7以上にしろ?


で、dependency.rb:247を読んでみたらば、
出力するエラーメッセージのamongstの次はインストール済のパッケージを出力するようになっている。

つまり、
amongst ...thin-1.2.11-x86-mswin3...
ってなっているということは、
thinがインストールされているということ、

お前分かってんじゃん
って言いたくなるけどぐっとこらえて、
教える方法を探る、

ひょっとして
今インストールされている1.2.11というバージョンが高すぎる?
という可能性も期待して、

gem install thin -v 1.2.7 --platform mswin32

とかでバージョンを落としたものをインストールしてみる。
で、実行してみると、

c:/ruby187/lin/ruby/site-ruby/1.8/rubygems/dependency.rb:247:in 'to_specs': Could not find thin (>=1.2.7) amongst [...thin-1.2.11-x86-mswin3...]

怒られたorz...

色々とやってみたけど、何をやっても怒られる、
その色々とやっているときにふと--platform mswin32を付け忘れた

gem install thin -v 1.2.7


もちろん予想としては
「もうインストール済だよ、バカ」
って怒られると思ったら、

1gem installed

え?もしや?

C:\>gem list

LOCAL GEMS ***
daemons (1.1.4) eventmachine (0.12.10 ruby x86-mswin32-60) iobuffer (1.0.0) json (1.5.3) msgpack (0.4.5 mswin32 x86-mingw32, 0.4.4 mswin32) msgpack-rpc (0.4.5, 0.4.4) rack (1.3.1) rev (0.3.2) rev-websocket (0.1.3) rubygems-update (1.8.5) sinatra (1.2.6) thin (1.2.11 x86-mingw32 x86-mswin32, 1.2.8 x86-mswin32, 1.2.7 x86-mingw32 x86-mswin32) tilt (1.3.2) ya2yaml (0.30) zipruby (0.3.6 mswin32)
ぬ?
thin (1.2.11 x86-mswin32, 1.2.8 x86-mswin32, 1.2.7 x86-mingw32 x86-mswin32)
version 1.2.7に x86-mingw32 x86-mswin32 と書いてある。 ってことはmswin32版とmingw版が入っているということ、 これで実は上手くいくのでは?
C:\>ruby ./echo.rb
C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:247:in `to_specs': Could not find eventmachine (>= 0.12.6) amongst
 [daemons-1.1.4, eventmachine-0.12.10-x86-mswin32-60, iobuffer-1.0.0, json-1.5.3, msgpack-0.4.5-x86-mswin32, msgpack-0.4.4-x86-mswin32,
 msgpack-rpc-0.4.5, msgpack-rpc-0.4.4, rack-1.3.1, rev-0.3.2,rev-websocket-0.1.3, rubygems-update-1.8.5, sinatra-1.2.6, thin-1.2.11-x86-mswin32
, thin-1.2.8-x86-mswin32, thin-1.2.7-x86-mswin32, thin-1.2.7-x86-mingw32, tilt-1.3.2, zipruby-0.3.6-x86-mswin32] (Gem::LoadError)
エラー対象が変わった。
dependency.rb:247:in `to_specs': Coul
d not find eventmachine (>= 0.12.6)
ってことは「--platform mswin32」つきで入れたものは mingw32版にしろってことか。 このときなぜか、一度「--platform mswin32」で入れたものが gem install **** だけでもエラーにならなくなっていた、不思議。 そして、実行
C:\home\ruby\frsyuki-rev-websocket-e5d3d97\examples>ruby ./echo.rb
C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in `gem_original
_require': no such file to load -- thin_parser (LoadError)
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/rev-websocket-0.1.3/lib/rev/webso
cket.rb:3
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`gem_original_require'
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`require'
        from ./echo.rb:4
どうやらthin_parserが認識されておらず、 thin_parserを別ディレクトリにコピーしてみる。 lib\ruby\gems\1.8\gems\thin-1.2.11-x86-mingw32\lib\1.8\thin_parser.so  ↓ lib\ruby\gems\1.8\gems\thin-1.2.11-x86-mingw32\lib\thin_parser.so で、実行。
C:\>ruby ./echo
./echo:3:in `fork': fork() function is unimplemented on this machine (NotImpleme
ntedError)
        from ./echo:3

どうやら、fork()は推奨されていないよう。 なので直接echo.rbを叩いてみる。
C:\home\ruby\frsyuki-rev-websocket-e5d3d97\examples>ruby ./echo.rb
start on 0.0.0.0:8081
おおおおぉぉぉぉぉぉぉ、成功

mingwとmswin32

wikipediaで調べる。
MinGW(ミン・ジー・ダブリュー、Minimalist GNU for Windows)はGNU ツールチェーンのWindows移植版である。MinGWWindows APIのためのヘッダファイルを含んでおり、フリーのコンパイラであるGCCを、Windowsアプリケーションの開発のために利用できる。 MinGWプロジェクトでは、2つの主要なパッケージを開発、配布している。Windows環境に移植されたGCCは、コマンドラインから使用することも、IDEへ統合することもできる。もう1つのMSYS(minimal system) は軽量のUNIX風シェル環境であり、端末エミュレータのrxvtと、開発ツールのautoconfを実行可能にするためのPOSIXコマンド群とが含まれている。 この2つのパッケージは、Cygwinからフォークして誕生した。CygwinではWindowsの機能性を犠牲にすることで、より機能的なUnix風環境を提供している。なお、どちらのパッケージもフリーソフトウェアで、Win32APIを利用するためのヘッダファイルはパブリックドメインで提供されており、GNUツールの移植版はGPLである。MinGWの個々のGNUツール及びMSYSは、MinGWの公式サイトより入手可能である。 http://ja.wikipedia.org/wiki/MinGW
分かるけど、じゃぁ--platform mswin32オプションは何だったの??

アンドロイドの可能性 〜WidgetとLiveWallpaper

アップルの牙城

アップルが一部のマックユーザの嗜好品から変化したのはipodの存在が大きいでしょう。ipodによってアップル製品は一部のマックユーザ(おそらくPCの世界ではヘビーユーザ)だけでなく、ライトユーザを一気に取り込むことに成功しました。一般消費者の世界を覆ってしまったと言っても良いのではないでしょうか。これがiPhoneの爆発的ヒットまで続いていくことになります。

アンドロイドの登場

アンドロイドが登場してから、一般消費者の感覚は変わりました。iphone/ipadはもはや王者足りえず、それらさえも製品群のひとつとなってしまいました。それくらいアンドロイド端末の広がりは早かった。日本のキャリア/メーカーの開発スピードの速さには驚きを隠せません。特にdocomoに関して言えば、携帯ユーザの50%を抱えている巨人、そのユーザたちがそのままスマフォへの移行するとなると、アップル陣営はwindowsのときと同様、一部のアップルユーザを囲い込むしかなくなってしまいます(まぁそこはソフトバンクの問題という話も・・・)

アンドロイドの未来と可能性

時代がアンドロイドに移ってきたことはもはや誰もが周知の事実となりました。では、これからどうなっていくのでしょうか。そんなことを考えていたとき、私は幸運にもエル・カミノ・リアルの木寺氏の講演を聞くことができました。そこにはたくさんの解がありました。その内容はこちらの記事で。

id:yukinkster:20110525:アンドロイド端末がもたらす企業の情報システムの変化

アンドロイドとiphoneについてはこう言われていました。

Android vs iPhone
・99:1になるかもしれない
Windows vs Macの対決構造とは時代が異なる
 →OSが無料、台湾製や中国製の安価な端末の勃興

上記の引用にもあるようにWindowsは有償ですが、アンドロイドはOSまで無償です。そして参加者が昔と比べてはるかに多い。中国や台湾が参戦しているだけで、その市場の競争力と広がりはとてつもないことになっています。

そうこうしているうちに最近同氏の「アンドロイド・ジャパン」が発売されました。
アンドロイド・ジャパン ―日本企業の命運を握るプラットフォーム―

この中で同氏はたくさんのことを語られているのですが個人的にこんな言葉が印象に残りました。

  • 意識のコンピューティング、無意識のコンピューティング

やっと、この記事で書きたかったことに入ります。

意識のコンピューティング、無意識のコンピューティング

視点は明確です。iPhoneにできてAndroidにできないことは何か、です。サブタイトルにもあるようにそれが

です。これらは本質的には同じだと思いますがどちらもiPhoneにはないものです。
 ウィジェット、すでにPCではおなじみなユーザも多いことでしょう。デスクトップに常に表示させておけるアプリケーションのことです。ではライブウォールペーパーはというと、通常の壁紙のように静的なものではなく、動的にそこに情報を表示できるといったものです。ともにスマフォのホーム画面に置いて(または設定)しておけば、必要な情報がそこに表示される可能性を秘めています。例えば、ニュースやメール等でしょう。
 今なら電気予報なんかがそれに一番マッチしているかもしれません。ただし、大きな違いはあります。ウィジェットが端末側でユーザが位置を決めるのに対して、ライブウォールペーパーは管理ツール等で外部操作が可能ということです。(私はやってみたことはありません・・・)これらは、今までの情報を取得する、という行為を根本的に変えていきます。自らが情報を取得しにいくか、端末が定期的に勝手に情報を取りに言って必要に応じてユーザに知らせてくれる、これを同氏は「意識のコンピューティング」と「無意識のコンピューティング」と呼ばれています。
 アンドロイドにせよ、iOSにせよ、スマートフォンタブレットで使われることに違いはありません。そこには、プライベートユースとビジネスユースがあります。今はプライベートユースがまだ全盛ですが、これからビジネス利用は大きく広がっていくことでしょう。そのとき、アプリケーションの開発の容易性(人材も含め)と導入のハードルの低さを考えると、自社アプリとしての情報共有アプリにAndroidが躍進する可能性は高そうです。先ほどのラブウォールペーパーやウィジェットにより自社会議の場所変更や打ち合わせ時間の変更、緊急連絡が端末に表示される、そうしたことが現実となるのは遠い未来ではないでしょう。
 AppleiCloudによって共有を遥かに身近なものにしようとしています。そこはGoogleがどう考えるかですが、Webサービスの連携を強めればよいだけです。Androidという端末視点で言えば、そうした共有された情報をユーザ側にどう知らせて共有して利用を促すのか、そういった視点では(あくまで現時点では)Androidが有利であり将来性はある、といえるのかもしれません。