Tuesday, November 10, 2015

Intentの歴史を変えるApp LinkingとGoogle Digital Asset Links

前回のブログで書いたように、CDD 6.0では5.1に比べて色々と変更や追加があります。

特に気になるのは 3.2.3.2 節の "Intent Resolution" です。この節のタイトルは、CDD 5.1までは"Intent Override"でした。
IntentはAndroidというOSを特徴づける重要な基本機能ですが、そのIntentの基本部分をこの節で規定しています。なのに、節の名前を変えてしまっているのです。このような変更は、5.1以前のCDDでは一度もありませんでした。

実は、CDD 6.0(というか、Android 6.0 Marshmallow)ではPackageManagerの挙動に変更が加えられています。
その変更とは、App Linksへの対応です。
App LinksのAPIについては、次のGoogleの公式サイトに書かれていますので、ここでは詳しく書きません。
http://developer.android.com/intl/ja/training/app-links/index.html

Marshmallow における App Links 対応で目を引くのは

  • 特定のURIに対するIntent-filterを持つアプリをインストールするときに、そのURIに対してユーザの指示なしで自動的にデフォルト起動を指定できる

という点です。そして、特定のURIに対してデフォルト起動を自動設定するアプリが正当なものであることをチェックするためのインターフェースが用意されました。
それが、Google Digital Asset Linksです。

https://developers.google.com/digital-asset-links/

この仕組みを使うことにより、PackageManagerがアプリをインストールするときに、「そのアプリをデフォルト起動に設定してよいかどうか」を検証できるようになりました。

Intentというのは先に書いたように、Androidの根幹をなすAPIです。
いかなるアプリでも任意のIntent-filterを記述することができます。
ユーザは(プレインストールアプリなどの一部の例外を除いて)、特定のURIに対してIntentを受信するアプリの中から、自分の好みのものを選んで起動することができます。
また、ユーザはいつでもデフォルト起動するアプリを設定したり、デフォルトを解除することができます。

これらの特徴は、Androidが自由であることを象徴していました。この自由なIntentの便利さを享受したことがない開発者は、まずいないと思います。

しかし、Marshmallowからは、自分が開発したアプリを特定のWebサイトからのリンクに対して自動的にデフォルト起動するように設定できることになったのです。

ユーザから見れば、いちいちアプリをインストールする度に、ブラウジングするとアプリ選択画面が出てきてうっとうしいのを回避できるようになります。
一方で、「敢えてインストール済みの専用アプリを使わずに、ブラウザや別のアプリで特定のURLにアクセスしたい」というようなことができなくなる可能性を示唆しています。

それがいい事か悪い事かを判断するのは難しいですが、いわば「Intentの歴史を変える」ような大きな変更であることは間違いありません。

そして、CDD 6.0では、 App Links とGoogle Digital Asset Linksを利用して Intent-filter に定義された URI が妥当かどうかをチェックするための規定が追加されました。

この規定の詳細は、コミックマーケットC89で頒布する Techbooster の新刊に書く予定です。
https://techbooster.github.io/c89/

Monday, October 19, 2015

Android 5.1と6.0のCDDを比較する

2015/10/16にAndroid 6.0 MarshmallowのCDDが公開されました。
https://source.android.com/compatibility/downloads.html
https://static.googleusercontent.com/media/source.android.com/en//compatibility/android-cdd.pdf

Android 5.1からCDDがどのように変わったのか、ちょっと調べてみました。

Android 5.1のCDDは少なくとも2種類の版が存在していますが、比較対象としたのは2015/7/10の版です。版数の違いは、表紙の日付で区別できます。
ちなみに、Android 5.0と5.1のCDDについては、Android改善プログラミング で比較しています。ご興味のある方はぜひ読んでみて下さい。

記述量について

Android 5.1のCDDは62ページでしたが、6.0では74ページとなっています。
一方でファイルサイズは2/3近くにスリム化されています。無駄な画像のサイズなどを削ったのでしょうか。

表紙の変更点

Android 5.1のCDDの表紙は、赤を基調としたデザインでした。6.0では、ライトブルーの背景に白いマシュマロのデザインになっています。

目次の変更点

5.1では目次は2ページだったのに、6.0では3ページに増えました。それだけ内容が盛りだくさんになったということでしょうか。
目次で削られた項目はありません。増えた項目を列挙します。
  • 新しい項目として次のものが追加されました。
    • 5.9 Musical Instrument Digital Interface(MIDI)
    • 5.10 Professional Audio
    • 8.3 Power Saving Modes
    • 8.4 Power Consumption Accounting
    • 9.11 Keys And Credentials
    • 9.12 Data Deletion
  • 3.9 Device Administrationは、5.1では小項目がありませんでした。6.0で次の小項目が追加されました。
    • 3.9.1 Device Provisioning
      • 3.9.1.1 Device Owner Provisioning
      • 3.9.1.2 Managed Profiling Provisioning
    • 3.9.2 Managed Profile Support
  • 3.12 TV Input Frameworkは、5.1では小項目がありませんでした。6.0で次の小項目が追加されました。
    • 3.12.1 TV App
      • 3.12.1.1 Electronic Program Guide
      • 3.12.1.2 Navigation
      • 3.12.1.3 TV Input app linking
  • 7.6 Memory and Storageに次の小項目が追加されました。
    • 7.6.3 Adoptable Storage
また、変更になった項目は次のひとつだけです。
  • 3.2.3.2 Intent Overrides は6.0では Intent Resolution という名前に変わりました。

Friday, May 1, 2015

海外旅行中にMacBook Airが壊れたら何が起きるか

「海外旅行中にMacBook Airが壊れる」という事象が発生しました。
その時の記録です。
参考になる人がいるかもしれないし、いないかもしれません。

4/8(水)

  • DroidCon Montréalに参加するために羽田空港からトロント行きの飛行機に乗る。
  • 夕食のあと、座席でMBAを広げて作業をしていたところ、うっかりしてCAにもらったコカコーラをこぼしてしまう。量は多くなかったがMBAにもかかってしまった。幸いにして隣席の韓国人青年まで被害は及ばなかった。彼は親切にもコカコーラを拭き取るのを手伝ってくれた。
  • 飛行機を乗り継ぎ、モントリオールのホテルに着いてからMBAの電源を入れると普通に起動した。「問題なさそうだな」と思いディスプレイを一度閉じてからもう一度開くと、2度と起動しなくなった。
  • 私にはクレジットカード付帯の海外旅行保険(A社)があり、また勤務先の団体日常生活保険(B社)にも加入していて、どちらも携行品損害補償がある。これは出発前に確認済みで、「保険があるから何とかなるだろう」とこの時は思った。

4/9(木), 10(金)

  • DroidConはしょうがないのでPC無しで参加。聴講するだけなので、致命的なトラブルではなかったが、メモを取るのは大変だった。
  • 合間を見て保険会社A社に電話を入れる。確認したのはおよそ次の内容。
    • 現地で修理してもいいし、帰国後の修理でも可。
    • 保険対象のPCの写真を撮ることが必須。
    • 保険金請求には見積書か領収書のいずれかが必須。その他パスポートや航空券などの証明書類の写しも必要。
  • モントリオールのジーニアスバーは、滞在しているホテルからはやや離れていた。また滞在期間が短く、修理に費す時間が勿体ないので、修理などの処置は帰国後に行うことにした。

4/11(土)

  • 帰国のための飛行機に乗る。機中で日付変更線を越える。

4/12(日)

  • 帰国。帰宅する前に、近くのクイックガレージへ直行。次のような説明を受ける。
    • 今日はAppleのオンラインシステムが定期メンテナンスで停止しているため全世界で修理の処理はできない。明日の受付となる。
    • 水没の場合、修理はほぼ確実に高額になる。購入費用を上回ることもある。
    • 保証外修理をクイックガレージに依頼するとAppleに直接修理を依頼するよりも高額になる(手数料を上乗せするため)
    • 修理代はまず概算金額を電話で知らせる(ここまでは無料)。正確な金額は工場に送ってから確定するので1週間くらいかかる。見積書発行は有償になる。
  • まず概算金額を教えてもらうように依頼し、MBAを預けて帰宅。

4/13(月)

  • クイックガレージから電話があり、概算金額が86,400円と提示される。また見積書を発行する場合、概算修理代の10%に相当する見積書発行費用がかかるとのこと。つまり見積書発行だけで8,640円もかかる。
  • A社に電話し、昨日と今日のクイックガレージとのやりとりを伝える。
    • 86,400円は全額補償されるのか→補償の上限は10万円。また免責が3,000円ある。さらにA社の場合、減価償却を年率10%で計算する。私のMBAは2年前に約12万円で購入した(金額はうろ覚え)。つまり120,000×(1-0.1×2)-3,000=93,000円が(概算だが)補償の上限となる。仮に修理代が86,400円の場合、支払われる保険金は83,400円になる。結構ギリギリだ。
    • 見積書発行費用は補償されるのか→No.
  • 修理するか新しいMBAを買ってしまうか、一晩悩む。

4/14(火)

  • B社にも電話してみる。おおよそ次のような説明を受ける。
    • 補償の上限は50万円。免責は5,000円。
    • 減価償却率は6か月毎に5%。
    • A社とB社の両方に保険金を請求した場合、支払額は按分される。
    • A社だけ(またはB社だけ)に請求しても、A社とB社の両方で保険金を負担することになる(ので2社両方に請求する意味はあまりない)。
    • 見積書発行費用は補償されない。
  • 購入したのはちょうど2年前なので、減価償却率はA社もB社も20%で変わらない。他の条件も、ほぼ同一とわかった。それならば、免責金額が安いA社に請求する方がよい。

4/15(水)

  • 「8,640円もかかる見積書発行費用を安くできないか」と考えてAppleに電話してみる。シリアル番号やメールアドレスの確認などで少し手間取り、何回か電話するハメになったが、次のことがわかった。
    • 修理代は81,000円。
    • 書面の見積書は発行できない。
    • メールでの見積書発行は無料で可能。ただし発行に3〜5営業日かかる。
  • 最初にクイックガレージから説明を受けたように、修理代は少し安かった。しかし驚いたのは修理金額が電話の問い合わせだけで確定してしまったことである。おそらく社内マニュアル等で「水没は××円」のように決めうちされているのであろう。
  • 夕方、クイックガレージに行き修理をキャンセルして預けていたMBAを返してもらう。費用の点からクイックガレージを利用するのを諦めた訳だが、結果として1円も払っていないにもかかわらず、とても親切に対応してもらった。

4/16(木)

  • 来週中には修理が完了しない事はほぼ明らかになってきた。4/25にはDroidKaigiというイベントを控えていて、私は実行委員の一人だったため、色々と支障が出てくる可能性が高かった。そこで新しいMBAを買うことにした。円安などの影響もあり購入費用は約14万円となったが、Mid 2012からEarly 2015へとスペックが上がるので納得することにする。

4/18(土)

  • A社とB社の両方から保険金請求の書類が届く。先に書いたようにA社に請求した方が少し有利だが、請求書類を読むと「見積書・領収書はコピーではなく、必ず原本を添付すること」とある。メールの見積書は「原本」と言ってよいのだろうか。また「写真は破損箇所がわかるように撮影すること」と書かれている。水没しただけなので、見た目は全く破損していない。

4/19(日)

  • 新しいMBAが届く。早速、TimeMachineからリストアする。数時間かかったが、すぐに使えるようになった。最後のバックアップは出発前日に取っておいたので、失ったデータもほとんどない。

4/20(月)

  • Appleから見積書のメールが届く。事前に電話で聞いていたとおり、修理見積額は81,000円であった。
  • A社に電話し、添付書類について問い合わせる。
    • メールの見積書を添付して問題ないのか → 「書面の見積書が発行できなかった事情を、請求書類に記載して下さい」
    • 外見上の破損箇所はないが写真添付は必要か → 「現品を確認するために、破損していなくても必要です」
  • A社への請求書を投函。請求書以外に添付した書類は次のとおり。他に購入時の領収書が必要だが、見つからなかったので、特に何も添付せずにうろ覚えの金額をそのまま請求書に記入した。
    • パスポートのコピー
    • 航空券のeチケット控え(自動化ゲートを利用したためにパスポートに日本への入国印がなかったため。パスポートに入出国印がある場合は不要)
    • MBAの写真(念のため、色々な方向から数枚撮影した)
    • 修理見積書のメールを印刷したもの
  • A社への請求書に「同等の保険に加入している場合、その情報」を書く欄があったので、B社の保険証券番号などを記入しておいた。その代わり、B社の請求書は特に何もせずに放置。

4/25(土)

  • DroidKaigi当日。新しいMBAのおかげもあり、大きなトラブルもなく終了。

4/28(火)

  • A社から78,000円が振り込まれる。これにて保険金請求の手続きは完了。私の手元には、新しいMBAと電源が入らないMBAが残った。

Monday, February 23, 2015

DroidKaigiへの応募は2/25までです!

ご存じの方も多いかと思いますが、4/25(土)に、DroidKaigiというAndroidの開発者向けイベントが開かれます。

http://droidkaigi.github.io/

私は実行委員の一人としてDroidKaigiに参加しています。

これはあくまでも個人的な考えですが、DroidKaigiの特徴は、次の2つです。これは十分なメリットだと、私自身は思っています。


  • 一定以上の規模にもかかわらず、スポンサーに頼らず運営する(ただし会場提供のみサイバーエージェント様にご協力いただきました)。
  • CFPで講演者を公募し、講演者選定の公平性を可能な限り担保する。


DroidKaigiでは、講演者を募集しています。〆切は2/25です。
まだ講演に応募しようかどうか迷っている方がいれば、ぜひ応募して下さい!

Friday, May 3, 2013

目的が変われば視点が変わる


半年ほど前から、とある理由があって、登山をちょくちょくするようになった。
それで、一つ、気付いた事がある。

以前はよく山道をドライブしていた。
その頃は、奥多摩周遊道路とか、雁坂トンネルといったスポットは、そこがほぼ最終の目的地だった。
周遊道路を数馬から奥多摩湖まで走り切れば、それだけで、何かをしたような気分に浸って、満足していた。

しかし、今は、これらの道路は、出発点か、出発点に行くまでの途中経路に過ぎなくなった。
目的が、ドライブから山に登る事に変わったので、車に乗っている間は、まだスタート地点に辿り着いていないのである。

かつてはゴールでしかなかった場所が、スタート地点になった。
そうなると、見える物が全く違ってくる。

以前は、山は、ただの美しい景色でしかなかった。
そして、それをただ見るためだけに来ていた。

しかし、今は、山を見ると、その中を通る登山道が想像できる。
実際にこれから歩こうとしている道ならば言うまでもないし、そうでなくても、エスケープルートなどは、出発前に、大まかには頭に入れている。
だから、ある一本の登山道を歩こうとすれば、自然と、その数倍の距離の、別の登山道がある事までわかってしまうのだ。

カーナビの地図や、Googleマップでは登山道は表示されない。
登山に関する知識は全く無かったので、今までは、ある筈の道が、道として見えなかったのだ。
しかし、登山用の地図を見れば、実は、道路と同じくらいか、それよりも多くのハイキングコースや登山道が、山の中を張り巡らせている事に気付くのである。

この違いは、ハードウェアやソフトウェアを、単に使うユーザの視点で見る時と、開発者の視点で見る時の違いにも似ていると思う。
目的と、持っている情報量によって、同じ画面を見ていても、そこに見える景色は別物なになってしまうのである。

まあ、当たり前と言えば、当たり前の事なんだけど。

Friday, March 29, 2013

海外旅行初心者向けマニュアル

「初めて海外行くんだけど、何を準備したらいいのかわからない」
的な相談を時々受ける事がある。

この高度情報化社会において、オンライン/オフラインを問わず、必要な情報さえ集めればこの程度の事がわからないとは考えにくいのだが…

しかし一方で、自分が初めて海外に行ったときの事を思うと、不安になる気持ちは、わからなくもない。

今後も、最低でも数年はこのような傾向が続くだろうと予想し、「必要最低限、ここは読んどけ」で済むような形でまとめておくことにした。


  • 絶対に必要なもの
  • 渡航先、渡航目的、渡航期間によっては必須なもの
    • ビザ、ESTA(米)、ETA(豪)
    • 出国用(帰国用)の航空券のeチケット控え
      • 必ず印刷しておく。スマートフォンやノートPCに保管しておく手もあるが、電池が切れたら終了。
    • 宿泊先の情報(バウチャーなど)
      • 同じく印刷しておく。
  • 可能な限り、持って行った方がいいもの
    • 予備の財布(現金やカードは2か所以上に分散して、スリや紛失などの事態に備える)
    • パスポートのコピー(本物はホテルの金庫などの安全な場所に保管しておく)
  • 可能な限り、持って行かない方がいいもの
    • 全ての重たい物、大きい物
    • 多額の現金(最大でも3万円程度)、貴金属類
    • 高価なPC、一眼レフカメラ等
  • 出発前に入手しておくべき情報
    • 外務省の渡航情報
    • 旅行会社・航空会社・クレジットカード会社の緊急連絡先
    • ネット環境(必要に応じて)
  • 国内旅行では不要だが海外旅行では必要なもの
    • スリッパ、歯ブラシ
  • 国内でも海外でも必要だが現地での入手が難しいもの
    • 常備薬

とりあえずこんな所で。

Sunday, January 20, 2013

Mac(Mountain Lion)のWi-Fiで5GHz帯を優先して使いたい

年明け早々、MacBookAirを買いました。Macを買うのは17年ぶりです。
Mountain LionとかいうOSで、昔の知識はほとんど役に立ちません。
初心者同然です。

そして、早速、トラブりました。

スターバックスなどで、公衆無線LANに接続しようとすると、2.4GHzのアクセスポイントばかり繋ぎに行ってしまい、なかなか5GHzのアクセスポイントを捕まえてくれないのです。
2.4GHz帯は都市部では無茶苦茶混雑しているので、可能な限り利用するのは避けたいものです。

初心者なりに色々調べた結果、次のような事がわかりました。

  • MacOS上では2.4GHzと5GHzを選択する事はできない。
    • docomo Wi-Fiau Wi-Fi SPOTのように、同じ名前のSSIDで2.4GHzと5GHzの両方のAPがある時は、ほとんどの場合、2.4GHzのAPに繋がってしまう
  • optionを押しながらメニューバーのAirMacアイコンをクリックすると、SSID毎にチャネルや周波数が表示されるので、とりあえずどのAPに繋がっているのかはわかる。
    • ただし複数のAPが同じSSIDを使っている場合は、そのうちの一つしか表示されない。
    • また、Wi-Fi Diagnosticという隠しユーティリティを起動することができる。全てのAPのチャネルとMacアドレスを表示してくれたり、ノイズの状況をグラフ表示してくれたりして、それなりに便利。Wi-Fi Diagnosticについては、「那覇レポート: Mountain Lion新機能Wi-Fi Diagnosticsツール」に詳しい。
  • /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport という隠しコマンドがある。AirPort Utilityとは似て非なるもので、Wi-Fi Diagnosticのコマンドライン版のようなもの。引数無しで起動すればオプションが表示されるので、それを見れば、使い方は大体わかる。
    • 次のようなオプションがある。
      • -c数字, --channel=数字 チャネルを指定する
      • -z, --disassociate 全てのネットワークから切断する
      • -I, --getinfo 接続中のネットワークの情報を表示する
      • -s,--scan APの一覧を表示する
      • -x,--xml XML形式で出力する
      • -P,--psk パスフレーズからPSKを生成する
    • -cや-zを使うには、管理者権限が必要。

という訳で、aiport -s で接続したいチャネルを調べて、airport -c で指定すれば5GHzなチャネルに接続できそうです。

早速、某所のスターバックスに行ったときに試してみました。目標はdocomo Wi-Fiの5GHz APへの接続です。

airportに何らかの方法(略)でパスを通しておいて、まずは接続状況を調べます。

$ airport -I
     agrCtlRSSI: -75
     agrExtRSSI: 0
    agrCtlNoise: -90
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 36
        maxRate: 54
lastAssocStatus: 0
    802.11 auth: open
      link auth: none
          BSSID: XX:XX:XX:XX:XX:XX
           SSID: docomo
            MCS: -1
        channel: 1

となりました。チャネル番号は1〜14が2.4GHz、36〜140が5GHzですから、見事に2.4GHzなAPを掴んでしまっています(先述のように、optionを押しながらAirMacアイコンをクリックしても、チャネル番号を確認できます)

そこで、5GHzなAPを探します。
スキャンすると…

$ airport -s| grep docomo
                          docomo XX:XX:XX:XX:XX:XX -70  1       N  JP WEP
                          docomo YY:YY:YY:YY:YY:YY -75  36      N  JP WEP


という結果でした。2つ並んだ数値の、右側の値がチャネル番号です。
このスタバに設置されているdocomo Wi-Fiは、チャネル1(2.4GHz)とチャネル36(5GHz)を使っている事がわかりました。
そこで、

$ sudo airport -c36

を実行してみると…



となりました。もちろん、airport -Iでも同じ結果になっています。
という訳で、少々手間はかかりますが、無事に5GHzなAPへの接続に成功できました。

DroidKaigi 2020 中止のうらばなし

既に公表されているとおり 、2/20,21の DroidKaigi 2020は中止になってしまいました。 実行委員のひとりとして多少なりともDroidKaigi 2020の準備に関わった立場から、今回の中止に関して感じたことを簡単に備忘も兼ねて書いておきます。 私のDroi...