2014年1月2日木曜日

無線アクセスポイントと携帯基地局の位置情報データベース

GPSで現在位置を測定できるのが有名だが、無線LANのMACアドレスや携帯基地局のIDからも位置測定を出来る。そのためMACアドレスを晒すのは自宅住所を晒すのと同じという問題も起きている。商業ベースで無線MACアドレスと基地局IDを収集しているサービスは多いが、オープンな形でデータを集めて公開しているプロジェクトに
  1. Mozilla location service (位置情報提供用アプリ)
  2. opencellid.org (情報提供用アプリ)
  3. openbmap.org (情報提供用アプリ)
  4. Sensorium - A Generic Sensor Framework (情報提供用アプリ)
がある。上記のプロジェクトのアプリを入れて情報収集に協力してみることにした。

2013年12月27日金曜日

自分のプロフィールにも検索結果にも表示されない謎のG+投稿

Google Local Tokyoに批判的意見をGoogle+で再共有したら、自分のプロフィールにも検索結果にも表示されない不思議な投稿になったので、記録として貼っておく。これはたんなるバグか、管理者が裏ワザで操作しているのかどっちでしょうか?
Google+で消された投稿
見えない投稿の URL はhttps://plus.google.com/115653424494952359766/posts/YEDiDGjAkY2 です。

2013年12月21日土曜日

データ専用SIMでCell IDをわかるようにする

日本通信などのようにSMSも音声通話もついていないデータ通信専用SIMをandroidで使うと、
  1. アンテナピクトが立たない
  2. セルスタンバイが異常に電力を消費しているように見える
  3. セルID (携帯基地局のID)がアプリにわからなくなり位置情報が不正確になる
という問題がある。android 4.4ではついに上記の問題がすべて解決されているが、今度は設定→電池→セルスタンバイで詳細を見ると、圏外時間が100%になっているように見えるという新しいバグが生じている。android 4.03から4.3ではXposed(要root)モジュールのドコモSIMパッチャーを使うと上記の1と2は解決する。3については解決しない機種もある(例えばnexus 4)。

電話アプリから *#*#4636#*#* と入力して出てくる隠しメニューで携帯電話情報→CellInfoListRateを押すとセル情報の中にセルIDが表示されている場合、携帯電話自体はセルIDを認識しているがソフトウェアのどこかがアホなのでアプリのセルIDを伝えることが出来ていない。その場合、android 4.3の場合は
GsmCellLocation mNewCellLoc = (GsmCellLocation) getObjectField(param.thisObject, "mNewCellLoc");
List<CellInfo> mLastCellInfoList = (List<CellInfo>) getObjectField(param.thisObject, "mLastCellInfoList");
if (mLastCellInfoList.size() > 0) {
    CellIdentityWcdma ci = (CellIdentityWcdma)callMethod((CellInfoWcdma)(mLastCellInfoList.get(0)), "getCellIdentity");
    if (ci.getCid() != -1) {
callMethod(mNewCellLoc, "setLacAndCid", callMethod(ci, "getLac"), callMethod(ci, "getCid"));
callMethod(mNewCellLoc, "setPsc", callMethod(ci, "getPsc"));
    }
}
というコードをドコモSIMパッチャーに追加して、セルID情報をアプリがアクセスする変数に移してあげるとandroidアプリがセルIDをわかるようになることもある。上記の変更を施したjavaソースをここに置く。コンパイルしてAPKにしたものをここに置く。注意事項:
  • 2013年12月21日にAPKを更新し、繋がっているのにcell IDが表示されないことがある問題をcom.android.internal.telephony.gsm.GSMPhone:getCellLocation()もhookすることで対応した。
  • 上に置いたAPKだけインストールしても何も起きない。まずrootを取ってxposed frameworkをインストールして使えるようにしてから、上に置いたAPKをインストールしてxposed frameworkを起動してドコモSIMパッチャーを有効にして下さい。
  • LTEと2G GSMにも対応しているはずだがテストする環境が無いからテストできていない。上記のコードはWCDMA決め打ちだが実際のソースコードとAPKは決め打ちしていない。
  • Android 4.3でしか効果はない。Android 4.4はデータ専用SIMでもセルIDがアプリに渡されるからこのxposedモジュールは不要。Android 4.2.2以下では関数名や変数名を変更しないといけないが、テストする環境が無いのでAndroid 4.2.2以下用のコードは何もいじっていない。
  • 上記のJAVAソースからAPKをコンパイルして作る場合、ドコモSIMパッチャーの2013年7月26日版のソースコードのjavaファイルを置き換えて、AndroidManifest.xmlのminSdkVersionを18に増やして下さい。

この件は作者の方に以下のようにGoogle+投稿のコメント欄にて連絡済みです。


これ以上プログラムのロジックをいじる必要は無いと思うが、ご意見ありましたら以下のコメント欄などでお知らせ下さい。

2013年12月20日金曜日

Google Mapバージョン6(Androidアプリ)

Android版Google Mapはバージョン6からバージョン7になって

  • My Mapが未だに復活していない。
  • 公共交通機関を用いたナビが復活していない。知らない土地(外国含む)でバスに乗りGPS位置情報で降りるバス停が近づくと教えてくれるのが大変便利だったけど、バージョン7では公共交通機関のナビそのものが未だに復活していない。
という残念な変更が行われています。そこで最後のGoogle Mapバージョン6のAPKファイルを置いておきます。

インストール方法

端末に最初からインストールされたGoogle Mapがバージョン6以下またはインストールされていない場合


  1. Google Playでアプリの自動更新を禁止する
  2. Google Mapをアンインストールする
  3. 上記のGoogle Mapバージョン6APKをダウンロードしてインストールする

最初からGoogle Mapバージョン7がインストールされている場合

この場合、残念ながらGoogle Mapをアンインストールするためにroot権限を取る必要があります。

  1. Google Playでアプリの自動更新を禁止する
  2. Google Mapを普通のやり方でアンインストールする
  3. root権限を取る(これは1の前でもよい)
  4. Root Uninstallerなどのアプリを用いて最初からインストールされているGoogle Mapをアンインストールする
  5. 上記のGoogle Mapバージョン6APKをダウンロードしてインストールする
何かトラブルなど有ったら下のコメント欄に書いて下さい

2013年10月1日火曜日

LFGideos X1インストール記

LFGideos X1日本通信のideos (Huawei U8150B)にインストールしたときの覚書

ideos(日本通信が売っている8150Bのほうでemobileが売っているのはダメ)のメリットは

  1. SIMフリー
  2. FOMAプラスエリア対応
  3. 標準サイズのSIM対応
で、これらの特徴はなかなか他の端末では得られないからまだ手放せません。しかしそのままでは動作が遅すぎ不便すぎるのでROMを交換したほうが快適になります。
  • Google Play開発者サービスをインストールできない。これは最近のGoogle製アプリの大半で必要になり、Google製アプリの最近のバージョンを起動すると自動的にGoogle Play開発者サービスをインストールしようとし、失敗してアプリが起動しない。
  • Googleアプリを更新されると上記の症状で使用不可能になることがあるから、Google Playの自動更新をOFFにして勝手にアプリを更新されないようにする。特にYoutubeを更新すると使えなくなるから、更新してはいけない
  • Google+やgoogle my tracksアプリは古いバージョンのapkを拾ってきてインストールする。Google+はバージョン3.5.3、my tracksは2.02をインストールできる。
  • 実メモリーが少なすぎるからSwapper for Rootをインストールすると多少動作が速くなる。
Google Play開発者サービスをインストールする方法をご存知の方は教えて下さい

2013年6月7日金曜日

ガラパゴス化のすすめ

私は以下のような背景で日本の鎖国を推薦しているのですが、誰からもまったく賛成してもらえません。なお最初の段落の外国からの投資は2011年の外国からの対日投資がマイナスだった、すなわち投資が引き上げられていた、という下記記事が背景にあります。

「米国化」が進む日本、いずれ「三つ子の赤字」に陥る

外国から見て日本が投資先として魅力的にするためにどうすればいいか検討するためには、まず外国人や企業の背景や置かれている立場を理解して外国からの目線で考えないといけないけど、9割くらいの日本人はそういう外国人の立場に立って考えてみることが嫌いか、そもそも日本人以外の人間が存在することを認識していないと思います。大阪の橋下市長の発言は日本国内向けとしてはまあいいかも知れないけど、外国からどういう反応を受けるかまったく想定していないように見える。橋下さんの脳内では、日本国外には人間がそもそも存在していないとしか思えない。だけどそれは橋下さんだけが特別ではなくて、日本の外側に日本とはまったく違う背景・前提・世界観・常識で生きている人間がいるってことを実感としてまったく分かっていない日本人が9割くらいを占めていて、そういう9割の世論に沿って日本の進路が決まってくるので、外国から見てどう見えるかという観点とはまったく無関係に日本は今後も進んでいくと予想します。たまたままぐれで日本が外国から見て投資先として魅力的になる可能性はあるけど。

鎖国しちゃうと、オイルが無くて農薬と化学肥料も十分に使えるかどうか謎なのでから1日15時間くらい人力だけで畑を耕したり刈り入れしたり雑草を取ったりウンコから作った堆肥を撒きます。人力がとにかくいるので子供を生んだお母さんも子供をおんぶ紐で背負って産後1週間くらいから畑に出ます。農閑期以外は土日休日まったく無しです。それだけやって天候不作だと餓死者が出る世界を想定しています。気骨の無い人は当然死ぬし、一生のほぼ全てが労働だけで終わるので萌え萌えキュンも無いです。でもそうやれば外国人とかかわり合いにならなくて済むから生き残った日本人はハッピーだと妄想しているんだけど、まったく誰も賛成してくれないんですよねー。藤原正彦先生も、江戸時代の日本人はこの段落のような生活で幸福だったと書いています。

鎖国した場合にはオイルが無いからトラクターとかは使用不能だと思いますが、農薬と化学肥料が使えるのかどうかを今のところ判定できていません。 また、機械と農薬と化学肥料を使えない江戸時代は3000万人くらいの人口しか養えなかったので、そこからはみ出した人は餓死することを想定しています。

2013年6月5日水曜日

Google+ APIが現在バグっています

Google+ APIで特定の記事についたコメント一覧を取得する

が、何件コメントが有っても2件しかコメントを返さなくなっています。上記の関数を使ってWEBページにG+コメントを表示するデモページでもコメントが17件本来あるのに2件しか表示されなくなったいます。このG+記事にはコメントが17件付いていますけど、HTTP APIを用いてコメントを取得しようとすると下記のように2件しか取得できません。

この件はGoogle+ Developer Forumでも話題になっています。

$ wget -t 1 -S -O - https://www.googleapis.com/plus/v1/activities/z125jb5yhq3dyfwe5224exwiqruvtda0i/comments?key=AIzaSyA5ti-m7T8gFzR5uuMR6EJB7KygMaDr0hk
--2013-06-05 20:08:29--  https://www.googleapis.com/plus/v1/activities/z125jb5yhq3dyfwe5224exwiqruvtda0i/comments?key=AIzaSyA5ti-m7T8gFzR5uuMR6EJB7KygMaDr0hk
www.googleapis.com (www.googleapis.com) をDNSに問いあわせています... 74.125.31.95
www.googleapis.com (www.googleapis.com)|74.125.31.95|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています...
  HTTP/1.1 200 OK
  Expires: Wed, 05 Jun 2013 11:08:30 GMT
  Date: Wed, 05 Jun 2013 11:08:30 GMT
  Cache-Control: private, max-age=0, must-revalidate, no-transform
  ETag: "egWOTnJQshDUW7mcQ5TTH5LK5kQ/scHVPJwUGGN-8wgFh93QhFozvKc"
  Content-Type: application/json; charset=UTF-8
  X-Content-Type-Options: nosniff
  X-Frame-Options: SAMEORIGIN
  X-XSS-Protection: 1; mode=block
  Server: GSE
  Transfer-Encoding: chunked
長さ: 特定できません [application/json]
`STDOUT' に保存中

    [<=>                                    ] 0           --.-K/s              {
 "kind": "plus#commentFeed",
 "etag": "\"egWOTnJQshDUW7mcQ5TTH5LK5kQ/scHVPJwUGGN-8wgFh93QhFozvKc\"",
 "title": "Google+ List of Comments for an Activity",
 "items": [
  {
   "kind": "plus#comment",
   "etag": "\"egWOTnJQshDUW7mcQ5TTH5LK5kQ/mcBpYjFXrhKAFa8MJXGdw2j6DIo\"",
   "verb": "post",
   "id": "z125jb5yhq3dyfwe5224exwiqruvtda0i.1360594391049454",
   "published": "2013-02-11T14:53:11.049Z",
   "updated": "2013-02-11T14:53:11.049Z",
   "actor": {
    "id": "113706774556650311061",
    "displayName": "Sancho Virág Attila",
    "url": "https://plus.google.com/113706774556650311061",
    "image": {
     "url": "https://lh3.googleusercontent.com/-9AVmWRcEmwA/AAAAAAAAAAI/AAAAAAABgrM/zA_wxyVts7s/photo.jpg?sz=50"
    }
   },
   "object": {
    "objectType": "comment",
    "content": "Sorry for a lot of comments, but I have a new problem. :)\u003cbr /\u003eAll page shows all posts which created for one only. What could be the problem?\u003cbr /\u003e\u003cbr /\u003eExample I shared this the test shared post which included comments: \u003ca href=\"http://goo.gl/mltze\" class=\"ot-anchor\" rel=\"nofollow\"\u003ehttp://goo.gl/mltze\u003c/a\u003e\u003cbr /\u003eBut the same G+ comments included on this page also: \u003ca href=\"http://goo.gl/BTNxV\" class=\"ot-anchor\" rel=\"nofollow\"\u003ehttp://goo.gl/BTNxV\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e(tnx \u003cspan class=\"proflinkWrapper\"\u003e\u003cspan class=\"proflinkPrefix\"\u003e+\u003c/span\u003e\u003ca href=\"https://plus.google.com/113265892681003873244\" class=\"proflink\" oid=\"113265892681003873244\"\u003eMartin Matysiak\u003c/a\u003e\u003c/span\u003e)"
   },
   "selfLink": "https://www.googleapis.com/plus/v1/comments/z125jb5yhq3dyfwe5224exwiqruvtda0i#1360594391049454",
   "inReplyTo": [
    {
     "id": "z125jb5yhq3dyfwe5224exwiqruvtda0i",
     "url": "https://plus.google.com/102817283354809142195/posts/Ch1e36yt4aD"
    }
   ],
   "plusoners": {
    "totalItems": 0
   }
  },
  {
   "kind": "plus#comment",
   "etag": "\"egWOTnJQshDUW7mcQ5TTH5LK5kQ/8waRZoGwv8DlAa-CZPGS0-mydoQ\"",
   "verb": "post",
   "id": "z125jb5yhq3dyfwe5224exwiqruvtda0i.1360697414606157",
   "published": "2013-02-12T19:30:14.606Z",
   "updated": "2013-02-12T19:30:14.606Z",
   "actor": {
    "id": "102817283354809142195",
    "displayName": "Jenny Murphy",
    "url": "https://plus.google.com/102817283354809142195",
    "image": {
     "url": "https://lh4.googleusercontent.com/-yth5HLY4Qi4/AAAAAAAAAAI/AAAAAAAAPVs/fAq4PVOVBdc/photo.jpg?sz=50"
    }
   },
   "object": {
    "objectType": "comment",
    "content": "\u003cspan class=\"proflinkWrapper\"\u003e\u003cspan class=\"proflinkPrefix\"\u003e+\u003c/span\u003e\u003ca href=\"https://plus.google.com/113706774556650311061\" class=\"proflink\" oid=\"113706774556650311061\"\u003eSancho Virág Attila\u003c/a\u003e\u003c/span\u003e They both contain the same ID on lines 68 and 131 respectively:\u003cbr /\u003e\u003cbr /\u003e  &lt;div class=&quot;g-comments-for z12ewluort3ygpsqo04cgrmi1y2rvrqgwlk0k&quot;&gt;&lt;/div&gt;\u003cbr /\u003e\u003cbr /\u003ez12ewluort3ygpsqo04cgrmi1y2rvrqgwlk0k is the value that controls where the JavaScript will pull the comment from."
   },
   "selfLink": "https://www.googleapis.com/plus/v1/comments/z125jb5yhq3dyfwe5224exwiqruvtda0i#1360697414606157",
   "inReplyTo": [
    {
     "id": "z125jb5yhq3dyfwe5224exwiqruvtda0i",
     "url": "https://plus.google.com/102817283354809142195/posts/Ch1e36yt4aD"
    }
   ],
   "plusoners": {
    "totalItems": 0
   }
  }
 ]
}
    [ <=>                                   ] 3,532       --.-K/s 時間 0.001s

2013-06-05 20:08:30 (5.12 MB/s) - stdout へ出力しました [3532]