Xperia Playの運用(wifi編)

Xperia Playをb-mobileのU300で運用してみましたが
ネットやメールは問題ないのですが、アプリダウンロードは厳しかったので別の方法を検討しました。

XperiaPlay_1

いろいろ考えましたが、SPモードはつながらない・・・
moperaは高くなる+SPモードメールが使えなくなる。。
UQ WiMAXのモバイルルータは使わないので、このまえ解約したばかり・・
b-mobile fairは価格感がいまいち・・
ということで、考えた結果
「U300」+「公衆無線LAN」にすれば
メールはどこでもできて、場所によっては高速にネットができる!
という事を思いついた。

さっそく公衆無線LANのプランをざっと見てみる。

  • livedoor Wireless
    山手線圏内を中心に展開していて、主にルノアール、ヨドバシカメラ、サブウェイで利用可能
  • HOTSPOT
    NTTコミュニケーションズが運営していて、アクセスポイント数は4000以上ある。主にJR駅構内(主要)、東京メトロ、都営地下鉄、ドトール、スターバックスコーヒー、モスバーガー 、タリーズコーヒーで利用可能
  • Mzone/mopera U
    アクセスポイント数が6800以上あり、mopera Uやspモード契約者はオプション料金で、それ以外はMzoneでの契約となる。範囲はほぼHOTSPOTと一緒
  • フレッツ・スポット
    アクセスポイント数が9000とおおいが、各ISPへの中継用なので、他のフレッツ対応ISPと契約すると使える。接続にPPPoE認証が必要なので、機種を選ぶ。
  • BBモバイルポイント
    マクドナルドなどの無線LANはコレ、JR駅構内(JR東日本/JR西日本)、マクドナルド、成田エクスプレスで利用可能

いろいろあって、500円以下のものからあり、範囲が様々なので注意が必要
いつも使う場所は通勤の東京メトロと都営地下鉄なのでHOTSPOTにしようかと調べていたら
ローミングプロパイダというものがあり、格サービスをローミングして複数使うことができるプロパイダがあった。
そんな中で、今回選んだのは「WIRELESS GATE」で
「BBモバイルポイント、livedoor Wireless、ホットスポット、エキLANスポット、東海道新幹線N700系車内・駅待合室、羽田空港ビッグバード無線LAN、成田空港エアポートネット」に対応していて、組み合わせによって3プランが用意されている。

今回はメインの地下鉄がつかえる「ホットスポット+プラス」を選択してみた
月額480円で、「ホットスポット、livedoor Wireless、 成田空港エアポートネット」が使える。
ホットスポットだけを契約しても、地下鉄などを範囲に入れるプランだと800円以上するので
livedoor Wirelessもついててお得なので、コレにした。

契約を済ませて、さっそくアプリをインストールしてみた。

XperiaPlay_2

マーケットの評判どおり、ウィジェットと通知領域に出てきてウザイ。。
都営と東西線で試したところ、駅に着くたびにLANをつかんでくれる。

速度はまだ量ってませんが、かなり早いです。
アプリのダウンロードもさくさくです。

いまいちサービスが多すぎでわかりにくいので
もうちょっと使ってみて調べてみます。

※Xperia Playは技適マークがないので、国内でWi-Fiは使ってはダメです、その辺は夢の話です。

Androidマーケットの情報をPHPでとってくる。(追加)

Androidマーケットの情報をPHPで取得

意外と興味を持ってる人が多いので、ソースを簡単に説明
概要などはこちら→PHPからマーケットにアクセスするAPI
まず、どんな物かというと、これらの便利なPHPがあります。

  • local.php
    アカウント情報
  • market.proto.php
    マーケットのデータを整形
  • MarketSession.php
    マーケットとの通信を確立
  • protocolbuffers.inc.php
    これも通信系

MarketSessionとlocal.phpの修正

編集の必要があるのは、local.phpとMarketSession.phpを修正します。
local.phpにはアカウントを設定して、MarketSession.phpの修正は過去の記事を見てください。
ANDROID_DEVICEIDは適当でもよさそうですが、一応端末のデバイスIDを記載しました。

検索したら、画像と情報を一覧表示する様にしたいので、こんな感じにGETの値を取得して詳細検索を行うようにします。

[code language=”php”]
include("MarketLib/local.php");
include("MarketLib/protocolbuffers.inc.php");
include("MarketLib/market.proto.php");
include("MarketLib/MarketSession.php");
$sQuery = $_POST["search"] ? $_POST["search"] : "";
$session = new MarketSession();
$session -› login( GOOGLE_EMAIL , GOOGLE_PASSWD );
$session -› setAndroidId( ANDROID_DEVICEID );
$oAppReq = new AppsRequest();
$oAppReq -› setQuery($sQuery);
$oAppReq -› setStartIndex($nStart);
$oAppReq -› setEntriesCount($nListNum);
$oAppReq -› setWithExtendedInfo(true); //詳細検索する
$oAppReq-› setOrderType(AppsRequest_OrderType::NONE);
$oAppReq-› setViewType(AppsRequest_ViewType::ALL);
$reqGroup = new Request_RequestGroup();
$reqGroup -›setAppsRequest($oAppReq);
$response = $session-›execute($reqGroup);
$groups = $response-›getResponsegroupArray();
[/code]

次に取得したデータ分ループさせる。

[code language=”php”]
//マーケットの一覧データを一個一個解析
foreach ($groups as $rg)
{
$appsResponse = $rg-›getAppsResponse();
$apps = $appsResponse-›getAppArray();
//ココが個々のアプリループです。
foreach ($apps as $app)
{
$sIcon = AppIcon( $app-›getId() );
$oAppExtend = $app-›getExtendedinfo();
echo "‹img src=’".$sIcon."’›";
echo $app-›getTitle();
echo $app-›getId();
echo $app-›getPackageName();
echo $app-›getVersion();
echo $app-›getCreator();
echo $app-›getPriceCurrency();
echo $app-›getPrice();
echo $app-›getPriceMicros();
echo $oAppExtend->getPromoText();
echo $oAppExtend->getDescription();
echo "<br />";
}
}
//画像取得
function AppIcon($p_AppId)
{
global $session;
$savepath = "/var/www/html/icon/"
$session = new MarketSession();
$session-&#155;login(GOOGLE_EMAIL, GOOGLE_PASSWD);
$session-&#155;setAndroidId(ANDROID_DEVICEID);
$gir = new GetImageRequest();
$gir-&#155;setImageUsage(GetImageRequest_AppImageUsage::ICON);
$gir-&#155;setAppId($p_AppId);
$gir-&#155;setImageId(1);
$reqGroup = new Request_RequestGroup();
$reqGroup-&#155;setImageRequest($gir);
$response = $session-&#155;execute($reqGroup);
$groups = $response-&#155;getResponsegroupArray();
foreach ($groups as $rg)
{
$imageResponse = $rg-&#155;getImageResponse();
$imgpath = savepath.$p_AppId.".png";
file_put_contents(imgpath, $imageResponse-&#155;getImageData());
}
return $imgpath;
}
[/code]

後は適当にFormを用意すれば、マーケットの情報を表示できます。
このAPIかは分かりませんが、いくつかアクセスする度にマーケットの情報を引っ張っている
アプリ紹介サイト?もありました。

Android版SkypeのDBが危ない

Android版SkypeのDBがハック?される可能性が高い

android_skype

Androidアプリはインストール時に権限が表示されるが
そのアプリ以外のデータファイルも触ることが可能なので
保存したデータファイルのパーミッションがしっかりしていないと
他のアプリから見られてしまいます。

今回問題だったのは、sqliteで保存したデータが暗号化していないということで
Skypeに登録してある、名前、住所、電話番号、アドレス帳など
個人情報が他のアプリから見える結果となっていました。

ハックというより、共有ファイルとして個人情報が置かれている感じです。

# ls -l /data/data/com.skype.merlin_mecha/files/ユーザ名
-rw-rw-rw- app_152  app_152    331776 2011-04-13 00:08 main.db 
-rw-rw-rw- app_152  app_152    119528 2011-04-13 00:08 main.db-journal 
-rw-rw-rw- app_152  app_152     40960 2011-04-11 14:05 keyval.db 
-rw-rw-rw- app_152  app_152      3522 2011-04-12 23:39 config.xml 
drwxrwxrwx app_152  app_152           2011-04-11 14:05 voicemail 
-rw-rw-rw- app_152  app_152         0 2011-04-11 14:05 config.lck 
-rw-rw-rw- app_152  app_152     61440 2011-04-13 00:08 bistats.db 
drwxrwxrwx app_152  app_152           2011-04-12 21:49 chatsync 
-rw-rw-rw- app_152  app_152     12824 2011-04-11 14:05 keyval.db-journal 
-rw-rw-rw- app_152  app_152     33344 2011-04-13 00:08 bistats.db-journal

ユーザ名が分からなければ、ディレクトリにいけないから平気・・ではありません。
こんなに簡単にユーザ名が分かります。

# ls -l /data/data/com.skype.merlin_mecha/files/shared.xml 
-rw-rw-rw- app_152  app_152     56136 2011-04-13 00:07 shared.xml
# grep Default /data/data/com.skype.merlin_mecha/files/shared.xml 
      <Default>ユーザ名</Default>

iOSでは他のアプリのデータを参照できませんが(基本)
Androidアプリは気をつけなきゃいけません。

情報元
androidpolice

Xperia Playの運用

Xperia Playをせっかく買ったので、運用を検討してみた。

使い方としては、Xperia(初代)は気に入っているので
たまに遊ぶ2台持ちにする予定。

sim 4

SIM差し替えも考えながら、イロイロ調べたら。

●Docomo SPモード
APにつながらなかった。
スマートフォンケアに聞いたら、対象機種以外はNG+パケホ対象外になる可能性大との事、多分「10,395円」コース

●Docomo mopera
きっといけるはず、だけどコレもパケホ対象外になる可能性大との事。
もし、技適マークありの機種をDocomoに持っていっても、テザリング機能がある場合は「10,395円」コースになるそうです。
「IMEI」とかで見て、ホワイトリスト以外はアウト扱いにする?ようです。(詳しくは分かりません。)

●UQ WiMAXのモバイルルータ
持ち物増える+技適マークないからホントはNG

●ヨドバシカメラのSIM
詳しくはわからないけど、「パケット使い放題のプランで月額4,995円」安いと思う。
だけど約5000円なら差し替えて「10,395円」コースでも良い様な気がしてくる。

●b-mobile fair
回線速度が早くてお試し(縛りがない)のは良いけど、120日間または1Gは自分としては9,800円の価値がなかった。

●b-mobile U300
300kb縛りで絶対に早くない、でも安い&縛りがない。

6ヶ月+1ヶ月のお得なパッケージがまだアマゾンに残っていたのと
差し替えが面倒に感じてきたでの、結果として「b-mobile U300」に決定。

2日程で届いたので、さっそく開封
b-mobile U300

b-mobileのロゴはなくて、完璧にDocomoのFomaカードです。
Foma

まず「186-0120-915-886」へ電話して、SIMカードのb-mobile U300の電話番号?を入力します。
番号はSIMカードのケース裏にテープで貼ってあります。

5分ほどで利用可能になるといわれるので
APの設定を行う。

パッケージに記載されている下記設定を行う。

AP名:bmobile
APN:dm.jplat.net
ユーザ:bmobile@sw
パスワード:bmobile

b-mobileのHPだと

AP名:bmobile
APN:dm.jplat.net
ユーザ:bmobile@u300
パスワード:bmobile

ユーザ名が違うけど、どっちでもつながりました。

U300

使った感想ですが、とにかく遅い。。
W-ZERO3を使っていたことがありますが、それに近い物を感じました。

アプリのダウンロードはちょっと厳しいかもしれない。

※Xperia Playは技適マークがないので、国内でWi-Fiは使ってはダメです、その辺は夢の話です。

Xperia Playで遊んでみた!

Xperia Playで遊んでみた。
Play_clash
クラッシュ・バンディクーをやってみましたが、ラグもなく結構遊べます。

よくわかってないのですが、クラッシュ・バンディクーと他のゲームは扱いが違う?ようで
Androidアプリで、Xperia Playに最適化されたものと
クラッシュ・バンディクーはPlayStation Suiteのコンテンツのようです。

他のゲームを探してみると、アサシンクリードなど、結構イロイロありました。
※アサシンクリードはアクセスしたら、ありません適な表示になりました。
list

あと本体カラーは黒のみだと思っていましたが
発売日くらいに白もあると知って、Xperiaが白なので迷いましたが
今回の黒は光沢のあるきれいな黒なので、満足しています。
ura

ケースの情報はあまりないので、ガジェット系の情報サイトを見ながら探しています。
Engadget
物欲.ネット

Xperia Playが届いた!

Xperia Playが届きました。
Play
クラッシュ・バンディクーとなぞのブルース・リーの格闘ゲームなど
いくつかゲームがプリインストールされていました。

スライドさせてゲームパッド?を出すと、ゲーム画面が表示されます。
Game
クラッシュ・バンディクーは起動するとなつかしのPS起動時のPSロゴが表示されます。

設定が悪かったのかもしれませんが、SPモードのAPへアクセスは出来なかったので
モペラ生活へ戻るかもしれません。

ドコモショップに電話で聞きましたが

・SPモードにつながれば、SIMフリーでもOKです。
・XperiaはAndroidなので大丈夫だと思います。

という微妙な返答だったのでスマートフォンケアに聞いたら

・テザリング機能がなければ1万以下の定額で、あれば1万300円コース
・SPモードは規制してるのでつながらないハズ
・ドコモ以外のSIMフリーは基本テザリング機能アリなので1万300円コース

といわれました。

Sony好きとして、次はうわさのSonyタブレットに期待。

Xperia Playがすぐそこまで!

eXpansysが発送済みなった後、次はFedExからメールが届きました。

荷物追跡画面のURLが記載されており、香港を4/4の午後出発して
4/5の朝には成田空港まで来ています。

FedEx

FedExによれば、本日夕方に到着予定。

Xperia Playがもうすぐ届く!

eXpansysからメールが届きました。

Your order has been shipped.

注文履歴を確認してみると

Xperia Play

4営業日で届く予定。。

Node.jsのイベントループ

Node.jsのイベントループについて

JavaScriptはシングルスレッドなので「並行処理」を行うために、「ノンブロッキングI/O」で「非同期処理」を実現しており
Node.jsはイベントループと呼ばれるモデルを採用しています。

イベントループのイベントキューにイベントが登録され、イベントハンドラを実行します。
イベントハンドラの完了した結果は、イベントキューにコールバック関数を登録することで受け取ります。

そのため、シングルスレッドでブロックするI/Oを行った場合、そのイベント完了後に次のイベントが実行されてしまう。
並行処理させるためには、ノンブロッキングI/Oを使ってイベントの完了を待たずに次のイベントハンドラを実行させます。

Node.jsはイベントを生成と処理の制御を行うので
ファイルのリード、DBへのクエリ発行、HTTPサーバがリクエストを受けた時などにイベントが生成されます。

例えばテストファイルを作って試すとわかります。

test.js

var oHttp = require('http');
var oFs = require('fs');
oHttp.createServer(function(req, res) {
    console.log("Start");
    oFs.readFile('index.txt', function(err, content) {
        res.writeHead(200, { 'Content-Type':'text/html; charset=utf-8' });
        res.end(content);
        console.log("Response");
    });
    console.log("End");
}).listen(8080, '127.0.0.1');
console.log('ListenStart');

読み込むファイル

<html/>
 <head/>
   <title/>index</title/>
 </head/>
  <body/> みれた? </body/>
</html/>

実行

[root@dti-vps-srv34 ~]#node test.js

ブラウザで「http://127.0.0.1:8080」にアクセス。

[root@dti-vps-srv34 ~]#node test.js
ListenStart
Start
End
Response

EndがResponseより先になっています。
これはreadFile()にコールバック関数を登録しているので、非同期となり
読み込み完了した時点で関数が呼び出されているからです。

プログラムの書き方によっては非同期の部分をロックしてしまうので注意。

Node.jsとは

Node.jsとはサーバサイドJavaScriptの一種

サーバサイドJavaScriptとはサーバサイドのアプリケーションの実装言語として、JavaScriptを使用する言語および環境のこと
ブラウザ(クライアント)サイドと同じ開発言語で、サーバサイドの開発が出来るので、開発効率が上がるといわれている。

サーバサイドJavaScriptにはこれらがある。

  • Node.js
    googleが開発したエンジン、V8で実行する環境
  • Rhino
    JavaVM上で実行するJavaScript言語処理系
  • Aptana Jaxer
    Aptana社がオープンソースとして配布している。

でもそれだけならそんなに自分は興味を持ちませんでした。
node.jsの何がすごいと感じたかというと

  • WebSocketが簡単そう。
  • サーバーの負荷分散に期待あり。

です。

WebSocketが簡単そうは「node.jsでTwitteのタイムライン取得」でも書きましたが
ほんとに簡単に実装が出来ました。
npmというパッケージマネージャーでフレームワークなどのライブラリを取り込めるのでいろいろ可能性があります。

負荷分散はC10k 問題で「apache vs nginx」=「スレッド対イベントループ」を取り上げています。
Apacheはスレッド、nginx はイベントループで、スレッドモデルは実行スタックをコピーするので
スレッド(アクセス)が増えるほどメモリ使用率が上昇するが、イベントループはプロセスは1個なので
メモリ使用量はあまり上がらないので、大量のアクセスに関してはイベントループが有利ということ。

そして、Node.jsは後者のイベントループ
これによって、特定の重い処理を待つことなく、次の入力を受け取れるので
トランザクションを重視するより、短縮URLのようなIOを優先されるような場合で活用できそう。