ようへい

2012年11月27日火曜日

Nexus 7 (Android 4.2 JOP40C) での root 取得

Android 4.2がフルサポートされた Nexus Root Toolkit v1.6.0 がリリースされたので、Nexus 7で改めてrootを取得してみました。

USBデバッグを有効にする

rootの取得にはUSBデバッグを有効にする必要があります。
USBデバッグの切り替えは、開発者向けオプション画面から設定可能です。
Android 4.2では、デフォルトで開発者向けオプションが表示されていません。
そのため、USBデバッグを有効に設定することができません。
開発者向けオプションを表示させるには、設定»タブレット情報»ビルド番号を何回かタップすることで、デベロッパーモードとなり、開発者向けオプションが表示されます。
開発者向けオプションが表示されたら、USBデバッグを有効にしましょう。

Nexus Root Toolkit

ほとんど自動で Unlock / root 取得ができるツールです。
ダウンロード
こちらからダウンロードし、インストールします。
Nexus Root Toolkit v1.6.0 | WugFresh
http://www.wugfresh.com/nrt/
Nexus 7 (Android 4.2 JOP40C) での root 取得
Unlock
まず、デバイスのUnlockを行います。
Nexus Root Toolkitを起動し、Unlockをクリックし、画面にしたがってUnlockを行います。
Unlock後は、デバイスが初期化されるので注意しましょう。
デバイスが起動したら、再びUSBデバッグを有効にしておきましょう。
Root
次に、Rootを取得します。
Root取得時に、Custom Recoveryも併せてインストールする場合はCustom Recoveryにチェックを入れて、Rootをクリックします。
ここでインストールするCustom Recoveryは、Nexus Root ToolkitOptions画面から選ぶことも可能です。
無事root取得完了です。
Nexus Root Toolkitの作者さんに感謝です。
Nexus 7 (Android 4.2 JOP40C) での root 取得
関連記事

[GAE/J] deploy 時の Conflict エラー対処

deploy をしようと思ったらこんなエラーがコンソールに出た。
Preparing to deploy:
 Created staging directory at: 'C:\Users\User\AppData\Local\Temp\appcfg3567309257153504140.tmp'
 Scanning for jsp files.
 Scanning files on local disk.
 Initiating update.
com.google.appengine.tools.admin.HttpIoException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=hoge&version=1&
409 Conflict
Another transaction by user hogehoge is already in progress for app: hoge, version: 1. That user can undo the transaction with "appcfg rollback".
appcfg rollback をしてトランザクションをロールバックしろと。
手順はこんな感じ。
>cd "C:\Program Files\eclipse_4.2\plugins\com.google.appengine.eclipse.sdkbundle_1.7.3\appengine-java-sdk-1.7.3\bin"
>appcfg.cmd rollback "D:\workspace\hoge\war"
Reading application configuration data...
11 27, 2012 10:38:01 午後 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
情報: Successfully processed D:/workspace/hoge/war\WEB-INF/appengine-web.xml
11 27, 2012 10:38:01 午後 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
情報: Successfully processed D:/workspace/hoge/war\WEB-INF/web.xml
11 27, 2012 10:38:01 午後 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
情報: Successfully processed D:/workspace/hoge/war\WEB-INF/cron.xml
11 27, 2012 10:38:01 午後 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
情報: Successfully processed D:/workspace/hoge/war\WEB-INF/queue.xml
11 27, 2012 10:38:01 午後 com.google.apphosting.utils.config.IndexesXmlReader readConfigXml
情報: Successfully processed D:/workspace/hoge/war\WEB-INF/datastore-indexes.xml
Beginning server interaction for hoge...
0%  on backend null.
Email: ******@gmail.com
Password for ******@gmail.com:
Success.
Cleaning up temporary files...
これで deploy できるようになりました。
関連記事

2012年11月20日火曜日

ブラウザごとの閉じられたウィンドウオブジェクトの違い

window.openでウィンドウを開き、開いたウィンドウを閉じた場合、ブラウザによって閉じたウィンドウオブジェクトに対する処理が異なっていた。
リファレンス等に書かれていないようなので、メモ。
具体的には、以下のような処理を行った際の結果が異なる。
var wo = window.open("about:blank","hoge");

開いたウィンドウを閉じる
alert(typeof wo.name);

検証プログラム

以下で、実際の動きを確認できます。
ウィンドウチェックを行うと、テキストボックス内に、windowのステータスがdumpされます。

Internet Explorer 9の場合

閉じられたウィンドウのnameプロパティにアクセスしようとすると、エラーが発生する。
アクセスが拒否されました。
エラーnumberは-2147024891
閉じられたウィンドウオブジェクトのnameプロパティにはアクセスできないようだ。

Mozilla Firefox 17の場合

閉じられたウィンドウのnameプロパティの値はnullオブジェクトとなる。

Google Chrome 23の場合

閉じられたウィンドウのnameプロパティの値はstringオブジェクトとなる。
stringの値は""だった。

Opera 12の場合

閉じられたウィンドウのnameプロパティの値はstringオブジェクトとなる。
stringの値は""だった。
と、まぁ気にしない人にはどうでもいい情報でした。
関連記事

[Tasker] ネットワーク接続回復Task (ウィジェット/ショートカット用)

ネットワーク接続を回復するためのTask
Wifi
Off
Mobile Data
Off
Wait
5
Wifi
On
Wait
5
Mobile Data
On
Popup
再接続完了再接続完了
間に入れているWaitはなんとなく。
auで1Xの回線をつかんでしまった時などに行うと回復できる可能性があります。
これをTaskerのショートカットやウィジェットでホームに置いておけばいつでも再接続できます。
関連記事

2012年11月10日土曜日

Nexus 7 交換になりました

発端

数日前からタッチパネルが全く反応しなくなりました。
その後、ファクトリーリセットや、OEM Unlockによる初期化を試しましたが効果なし。
スタートアップの言語選択画面から進まなくなりました。orz
こんな状態です。
ということでまずはASUSに問い合わせしてみました。

ASUS

ASUSへは以下のフォームから問い合わせる。
ASUS Online Service
http://vip.asus.com/eservice/techserv.aspx 製品ジャンルはEee Padを選択。
すると、製品名でNexus 7を選択できる。

問い合わせから1日経過して返事が来ました。
対応遅いな。
しかも返事は以下のような返事。
logroid 様

このたびはお問合せいただきありがとうございます。

下記の件でございますが、ハードウェア的な問題の可能性が高く、現物検査に出す必要があると思われます。
詳細に関しては、コールセンターへご相談いただきますようお願いいたします。

『ASUSコールセンター』
サポート受付電話番号:0800-123-2787(通話料無料)
※携帯電話やPHSなど、サポート受付電話番号をご利用できない場合には、こちら(047-390-5630/通話料お客様負担)の電話番号におかけください。
受付時間:
平日: 9:00~18:00
土日: 9:00~17:00
※祝祭日、年末年始、夏期休暇中は休業となります。

発送先の住所は下記となります。
住所:〒279-0032 千葉県浦安市千鳥10-6 信濃運輸4F
宛先:ASUS Japan 修理サービスセンター 宛

お手数をお掛けして申し訳ありませんが、どうぞ宜しくお願い致します。

カスタマーサポート担当
解決にならないし・・・しかも現物検査?
おいおい、どんだけ時間かける気だよ。
そして書いてある電話番号に電話してみました。
すると、窓口の人はハードウェア的な問題じゃないとか、もう一度ファクトリーリセットしてくれとか言う。
いやいや、ファクトリーリセットやったし。
メールではハードウェア的な問題って言ってたのに、対応が一貫してない。
ハードウェア的な問題だと認める気がないようなので、適当に流して電話切りました。
サポートには言えないけど、ブートローダーでもタッチ反応してないんだから、OSとかアプリが影響してるとは思えない。
じゃあ、購入元のGoogleに連絡とって見るか。

Google

問い合わせは以下の電話番号から。
Google Play 端末サポートへの電話

Google Play チームへのお問い合わせは、0120-950-065 までお電話でお願いいたします。サポートは、月曜~金曜の午前 9 時~午後 6 時までご利用いただけます。
土曜だったのですが、普通につながりました。
窓口の人がスキルがあまり無いのか、ディスプレイが一切反応しないって言ってるのに、アプリ一覧から家のマークのアイコンをタップして設定画面に・・・とか言い出したので、いやいや、ディスプレイが一切反応しないんですよと。
事情を話すと、ハードウェア的な問題だと考えられるため、交換させていただきたいと。
また、OEM Unlockしてますと言ったのですが、よく分かっていないようでした。
それはロック画面のことですか? でしたら指で鍵のマークをスライドしていただいて・・・とかw。
申し訳なさそうに下手な対応でした。
交換方法とかはメールで送ると。
待つこと数十分、メールが来ました。
お客様

先ほどはお電話にてお問い合わせいただきありがとうございます。
また、ご不便をおかけ致しましたこと、お詫びもうしあげます。
誠に申し訳ございませんでした。
以下手順にて、交換手続きを行っていただきますようお願いいたします。
ご不明点がございましたら、お問い合わせください。

*重要*

元の端末を返品してください。
ご利用いただいていた端末を Google のサービス センターに返送していただく必要があります。交換品のご到着から 21 日以内に、Google のサービス センターに元の端末をお送りいただけなかった場合は、端末の正規価格分の追加料金が発生することになりますので、ご注意ください。
また、デビット カードご利用の場合、ご注文後、即時引き落としになる可能性があり、残高が充分でない場合、ご注文がキャンセルされてしまうことがございますので、併せてご注意いただきますようお願い致します。

保証範囲をご確認ください。
Google のサービス センターで元の端末の破損が保証外と判断された場合は、端末の正規価格を上限とした追加料金が発生します。交換品を注文して端末を調査に送付する前に、Nexus 7 のパッケージに同梱の保証書をご覧になるか、
www.asus.co.jp にアクセスして、ASUS の限定保証の詳細をご確認ください。

ご返品の際は、発送時の梱包材をご使用いただくことをおすすめします。荷物として受け取ったすべての商品(端末、AC アダプタ、USB ケーブル、スタートアップガイド、保証書)のご返品に際し、梱包した商品が箱の中で動かないように、必要に応じて梱包材を追加するなどして固定していただけますようお願い申し上げます。

返品のための準備の方法について詳しくは、
ヘルプセンター( http://support.google.com/googleplay/bin/answer.py?hl=ja&answer=2462890)をご覧ください。


1. 交換品をお受け取りいただくには、パソコンで下記のリンクをクリックしてください(モバイルからはご利用いただけません)。
アクセスすると、交換品が既に入ったお客様用のカートが表示されます。
ただし、カートにアクセスするには最初の購入時に使用したアカウントでログインする必要がありますのでご注意ください。
URL をクリックしていただくと、表示される画面右端に Complete Your Purchase ボタンがありますので、必ずそのボタンをクリックしてください。
クリックしていただければ、交換品の手配が完了いたします。

https://checkout.google.com/customer/gadget/buy.html?**********************************************************************************************************************************************

お客様のクレジット カードに、交換品の正規価格の引き落としが一時的に設定されます。これは、お客様のカードの信用限度の一定額を数日間留保するために行うものです。21 日以内に元の端末を送付いただき、端末の破損が保証の対象であることが確認された場合、請求は行われません。 

2. 添付の返品保証書 (RMA) の PDF ファイル を印刷します。

3. 返品保証書 (RMA)を 元の端末と一緒に箱に同梱します。

4. 修理返品リクエスト ページ (https://efulfillment.sakura.ne.jp/returnsolutions/nexus) 
    より、必要事項を記入し、配送業者の手配をします。

5. リクエスト フォームを提出後、確認メールが届きます。メールの記載事項に従ってご返送ください。

注意:プリンタをお持ちでない場合には、コンビニエンス ストアやインターネット プリント サービスなどを利用し、印刷をおこなってください。

今後とも Google Play をよろしくお願いいたします。

Google Play チーム 石坂
早速交換品の手配。
するとメールが届く。
ご購入ありがとうございます。
Google Play で購入した商品の交換のご注文を承りました。交換商品の注文はクレジット カードの明細にご利用金額として表示されますが、通常の場合、端末の代金、税金、送料などの請求は行われません。

欠陥のある商品を返送する手順についてはメールをご確認ください。この注文に対する請求が行われないよう、欠陥のある商品は速やかに返送してください。請求が行われないようにするには、返送する商品がご注文の日付から 21 日以内に到着するようにします。修理サービス センターによる検査の後、問題の原因が保証の対象と確認されれば、交換商品の端末についての請求は行われません。
追加料金?
koeeee
とりあえず、追加料金かからないことを祈り、交換品の手配をしました。
ドキドキ。
対応がすべて終わったら、続きを書きたいと思います。
交換になって何が切ないかって言うと、液晶保護シートが無駄になったこと。
高かったのに・・・。
関連記事

2012年11月6日火曜日

VirtualBox 4.2 での ホスト(Windows)・ゲスト(CentOS)間通信方法

VirtualBox 4.2でVM環境構築する際にハマったのでメモ。

要件

  • ゲストからインターネットに接続できること
  • ホストからゲストへ接続できること
ということで、ネットワークアダプタは、NATが適切であると思われる。

インストール

適当なOS(私はCentOSを使用しました)をインストールする。
必要に合わせ以下を行う。
SELinux の無効化
# /usr/sbin/setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=disabled
Firewall の無効化
# /sbin/service iptables stop
# /sbin/chkconfig iptables off
Sendmail の無効化
# /sbin/service sendmail stop
# /sbin/chkconfig sendmail off
yum のproxy設定
# vi /etc/yum.conf
proxy=http://proxy.example.com:8080

固定IP化

現在割り振られているIPアドレスの確認
# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:08:F5:6B
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe08:f56b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6539 (6.3 KiB)  TX bytes:13857 (13.5 KiB)
          Base address:0xd010 Memory:f0000000-f0020000
ルーティング(デフォルトゲートウェイ)の確認
# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        *               255.255.255.0   U         0 0          0 eth0
169.254.0.0     *               255.255.0.0     U         0 0          0 eth0
default         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
確認内容をもとに設定
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=**:**:**:**:**:**
ONBOOT=yes
IPADDR=10.0.2.15
NETMASK=255.255.255.0
GATEWAY=10.0.2.2
ネットワークサービスの再起動
# /sbin/service network restart
インターフェース eth0 を終了中:                            [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:
eth0 のIP情報を検出中... 完了。
                                                           [  OK  ]
一応確認
# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:08:F5:6B
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe08:f56b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:310 errors:0 dropped:0 overruns:0 frame:0
          TX packets:282 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26939 (26.3 KiB)  TX bytes:45933 (44.8 KiB)
          Base address:0xd010 Memory:f0000000-f0020000

ホスト→ゲスト間ssh接続

さて問題はここから。
ゲストOSのIPは固定できたので、固定したIPにホストのターミナルから接続を行う。
Connection refused
ありゃ・・・
サーバまでパケット届いてるのかなぁと思い、tcpdumpでパケットをキャプチャしてみても、1パケットも飛んできていない。
# tcpdump port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

0 packets captured
0 packets received by filter
0 packets dropped by kernel
どうしたものか。

ポートフォワーディング

仮想マシン側のネットワークの設定に、ポートフォワーディングというのがある。
ホストのポートを、ゲストのポートにマッピングできる。
以下のように設定。
(smtp、httpは必要に応じて設定)
名前 ホスト ポート ゲスト ポート
ssh 10022 22
smtp 10025 25
http 10080 80
設定後、localhost の 10022 に対してターミナルで接続するとうまくいった。
関連記事

2012年11月2日金曜日

11/2 Android ニュースひとまとめ

 Android端末は2008年に最初の製品が登場して以来、シェアを伸ばし続けており、市場成長のけん引役。出荷台数の前年同期比伸び率は91.5%となり、市場全体の伸び率46.4%を大きく上回っている。

 スマートフォンのOS別出荷台数で2位となったのは米Appleの「iOS」。同OSを搭載するiPhoneの出荷台数は2690万台、市場シェアは14.9%だった。Androidには大差をつけられたが、2桁の市場シェアを持つOSはAndroid以外ではiOSしかなく、世界のスマートフォン市場はこの二つのOSでほぼ9割を占める2強体制となっている。
ニュース - 2012年Q3の世界スマホ市場、Android出荷台数が1.3億台超、シェア75%に:ITpro
http://itpro.nikkeibp.co.jp/article/NEWS/20121102/434541/
Androidのシェア圧倒的ですね。
期間を限定しなくてもiOSといい戦いになっているんじゃないでしょうか。
新スマートフォンを続々と展開するファーウェイが、また新たなハイエンドAndoroidスマートフォン Honor 2 を発表した。シングルコアプロセッサ搭載の初代Honorから進化したHonor 2は、自社製のK3V2 1.4GHz クアッドコアプロセッサ、2GB RAM、8GBの内蔵ストレージを搭載する。

背面の裏面照射センサ採用8MPカメラは、連写や1080pのフルHD動画撮影に対応。microSDスロットも備える。前面カメラは1.3MP。

ディスプレイは 4.5インチ1280 x 720 IPS液晶。初代Honor の解像度が245ppiだったのに対し、Honor 2では iPhone の Retina ディスプレイとほぼ同じ326ppiへと飛躍的に向上している。

ほか Bluetooth 3.0、802.11b/g/n WiFi、GPSなど。GSMとWCDMA 5バンド対応。Android バージョンは4.0。
Huawei Honor 2 発表、「72時間駆動」の4コアAndroid携帯。4.5型326ppi 液晶採用 - Engadget Japanese
http://japanese.engadget.com/2012/11/01/huawei-honor-2-4-1-4ghz-k3v2-2gb-ram-4-5-326ppi
ストレージは小さいように見えますが、その他のスペックはかなり高め。
価格もかなり抑え目になっています。
国内メーカーも見習ってほしいな・・・。
関連記事

2012年11月1日木曜日

Google Play での 通貨表記について

Google Playにアクセスするツールを作っていて行き詰ったので、メモ。

¥表記で価格が取れない

アメリカにサーバを置いているクラウドサービス上からGoogle Playにアクセスすると、通貨表記が USD になってしまう。
URLパラメタに hl=ja を追加しても JPY で表示できない。
IPアドレスで判定されてしまっているようだ。
インターネット上にもこのような情報が少ない為、Googleのサポートに聞いてみた。

通貨表記の条件

Googleからの回答によると、以下の条件で通貨表記を決定しているとの事。
  1. Googleアカウントにログインしており、アカウントが、Google Walletのアカウントを作成済みなら、Google Walletでの国の通貨表記
  2. 上記に該当しない場合は、SIMカードでの国コード。SIMカードが無い場合は、アクセス元のIPから判断した国
つまり、アメリカにサーバを置いているクラウドサービスからGoogle Playにアクセスすると、IPから判定されUSD表記になってしまうという事。
また、URLパラメタ等でJPY表記にすることを強制できないようです。

対処方法

結局、クラウド環境から、日本のプロクシを介してGoogle Playにアクセスするという方法にしました。
USDをJPYに変換しようとも思ったのですが、変換結果がGoogle PlayでのJPYの値と異なるとまずいので・・・。
URLパラメタで制御できたりすれば一番良いんですけど。
関連記事

Androidアプリのセール情報チェックツール開発中!!

Androidアプリのセール情報チェックツールを開発しています。
現在クラウド環境にてデバッグ運用中です。
うまく動いている事が確認できましたら、セール情報をTwitter等でつぶやくようにしたいと思います。
そこで、セール価格をチェックしてほしいアプリ等ありましたら、コメントやTwitterにてGoogle Play上でのURLをご連絡いただきたいと思います。
アプリデベロッパーの方で、自分のアプリのセール情報をチェックしてほしい方も歓迎です。
実際にチェックツールでのチェックリストに追加するかは、こちらで判断します。
以下の条件にあてはまるアプリはチェックリストに追加しない可能性があります。
  • 無料アプリ
    チェックする意味が無い為、チェックリストから除外します。
  • インストール無料、アプリ内課金あり
    チェックツールで取得できるのはGoogle Playに表示された価格のみです。よって、アプリ内課金での価格は取得できません。誤解を招く事を避ける意味でチェックリストから除外します。
  • アダルトな内容のアプリ
  • 国や宗教の主張が含まれているアプリ
  • 著作権を侵害しているアプリ
    模造、キャラクターの無許可使用等
  • 評価が極端に低いアプリ
  • 評価数が少ないアプリ
  • ユーザに誤解を与えるアプリ
    実装されていない機能を謳っている詐欺アプリや、有名アプリに似せた名前のアプリ
  • その他、私個人の独断と偏見
チェックツールの大まかな仕様は以下です。
  • 1日4回チェック(登録アプリの増加によっては、回数を変更します)
  • チェック時間帯は原則、7時、12時、17時、22時
    いずれもJSTでの時刻
  • セールと判断する条件は、通常販売価格未満の価格であった場合
また、日毎に投稿しているアプリセール情報の記事に、チェックツールでのセール情報も記載する予定です。
関連記事