読者です 読者をやめる 読者になる 読者になる

tmytのらくがき

個人の日記レベルです

WebAuthenticationBrokerではまるよねというはなし

雑記

WebAuthenticationBroker便利ですね。特定のURLになったらログイン完了とみなしてURL返してくれる素敵クラスです。

ところでこれ、特定のURLがhttpじゃない何かの時にWebAuthenticationOptions.UseTitleつけると例外が無慈悲に飛んできます。5分も悩みました。

United Airlinesの機内Wifiをであそんでます

雑記

いまGoogle I/O 2016に参加してその帰りの飛行機の中です。United Airlinesの機内Wifiがつかえたのでせっかくだからいろいろ試してみました。

このエントリを書いた時点でこのあたりにいます。

f:id:tmyt:20160522065248p:plain

まず、United_Wi-FiというSSIDに接続します。すると、172.19.248.0/23なIPが割り当てられます。まぁ乗客が300人程度なので512個あれば足りるはずですね。

とりあえずDNSひいてみたかんじ。

$ nslookup google.com
Non-authoritative answer:
Server:  ns.unitedwifi.com
Address:  172.19.248.1

DNS request timed out.
    timeout was 2 seconds.
Name:    google.com
Address:  172.217.3.14

$ nslookup twitter.com
Non-authoritative answer:
Server:  ns.unitedwifi.com
Address:  172.19.248.1

Name:    twitter.com
Addresses:  199.16.156.70
          199.16.156.6
          199.16.156.102
          199.16.156.230

正しい結果が得られるようです。なるほど。

Webページをリクエストしてみると、全部に対して302 foundが得られるみたいです。

$ curl google.com -v
* Rebuilt URL to: google.com/
* timeout on name lookup is not supported
*   Trying 172.217.3.14...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to google.com (172.217.3.14) port 80 (#0)
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/7.46.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: squid/3.4.6
< Mime-Version: 1.0
< Date: Sat, 21 May 2016 21:06:13 GMT
< Content-Type: text/html
< Content-Length: 0
< Location: http://www.unitedwifi.com
< X-Squid-Error: 403 Access Denied
< X-Cache: MISS from bc01
< Via: 1.1 bc01 (squid/3.4.6)
< Connection: close
<
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 0

$ curl twitter.com -v
* Rebuilt URL to: twitter.com/
* timeout on name lookup is not supported
*   Trying 199.16.156.70...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0* Connected to twitter.com (199.16.156.70) port 80 (#0)
> GET / HTTP/1.1
> Host: twitter.com
> User-Agent: curl/7.46.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: squid/3.4.6
< Mime-Version: 1.0
< Date: Sat, 21 May 2016 21:07:31 GMT
< Content-Type: text/html
< Content-Length: 0
< Location: http://www.unitedwifi.com
< X-Squid-Error: 403 Access Denied
< X-Cache: MISS from bc01
< Via: 1.1 bc01 (squid/3.4.6)
< Connection: close
<
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
* Closing connection 0

機内のゲートウェイまでのPINGはまぁふつうぐらい

C:\>ping 172.19.248.1

Pinging 172.19.248.1 with 32 bytes of data:
Reply from 172.19.248.1: bytes=32 time=8ms TTL=64
Reply from 172.19.248.1: bytes=32 time=12ms TTL=64
Reply from 172.19.248.1: bytes=32 time=6ms TTL=64
Reply from 172.19.248.1: bytes=32 time=16ms TTL=64

Ping statistics for 172.19.248.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 6ms, Maximum = 16ms, Average = 10ms

302 Foundで示されているURLへアクセスすると20ドル払えといわれます。

まぁせっかくなので払うとすべてのURLに302 Foundを返すあれがなくなってこうなりました。

$ curl twitter.com -v
* Rebuilt URL to: twitter.com/
* timeout on name lookup is not supported
*   Trying 199.16.156.38...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connected to twitter.com (199.16.156.38) port 80 (#0)
> GET / HTTP/1.1
> Host: twitter.com
> User-Agent: curl/7.46.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< content-length: 0
< date: Sat, 21 May 2016 21:12:52 GMT
< location: https://twitter.com/
< server: tsa_b
< x-connection-hash: 8cf7ac5f78c055ca55106e70cb0b3426
< x-response-time: 3
< Connection: Keep-Alive
< Set-Cookie: guest_id=v1%3A146386517242165290; Domain=.twitter.com; Path=/; Expires=Mon, 21-May-2018 21:12:52 UTC
<
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0
* Connection #0 to host twitter.com left intact

衛星経由なのでPINGはかなり遅め。まぁしかたない。

>ping 8.8.8.8

Pinging 8.8.8.8 with 32 bytes of data:
Request timed out.
Reply from 8.8.8.8: bytes=32 time=745ms TTL=51
Reply from 8.8.8.8: bytes=32 time=799ms TTL=51
Reply from 8.8.8.8: bytes=32 time=921ms TTL=51

Ping statistics for 8.8.8.8:
    Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
    Minimum = 745ms, Maximum = 921ms, Average = 821ms

速度は…まぁTwitterぐらいならできるんじゃないですかね

f:id:tmyt:20160522065122p:plain

IIJmioが国際ローミングできたので525円払った話

雑記

今、Google I/Oでアメリカに来てます。アメリカなんて近いもんで10時間ぐらい飛行機にのってたらぷらーっとこれます。楽ちんなもんです。

ところで、みなさんIIJmio使ってますか?私も使ってます。でもって、アメリカに来ました。でもって、昨年11月に買ったT-MobileのSIMがあったんでIIJmioのSIM刺した電話はほったらかしにしてたんです。ほったらかしに。

f:id:tmyt:20160517153825p:plain

そしたら突然電話かかってきたわけですよ。画面をみたら+81xxxxxxxx …えっ?っておもったけども見覚えのある番号だったのでとりあえず出ました。

*「Azure課金サポートの鈴木(仮名)です」

そして思ったわけです。あれこれやばい奴じゃないの。そこで、アメリカの番号に日本から国際電話でかけなおしてもらえないかお願いしたところ、快諾してもらえたのでとりあえずよかったのですが。

ふと気になったのでIIJmioのサポートを見てみました。

音声通話機能付きSIMカードでは、国際電話及び国際ローミングがご利用いただけます。 サービスの利用方法については、NTTドコモのホームページ(新しいウィンドウを開きます)をご確認ください。

海外で使うにはどうすればいいですか | IIJmio

ふむふむ。

音声通話(1分あたり) 175円

国名・都市名・機種から調べる | サービス・機能 | NTTドコモ

なるほど175円。

f:id:tmyt:20160517153921p:plain

なるほど2分50秒。つまるところ、切り上げて3分なので525円じゃな…?

IIJmioが国際ローミングで音声通話を発着信できるので、うっかりフリーダイヤルから着信するとフリーどころか着信課金で500円も持っていかれた話でした。

Hololensを触ってきたよ!

雑記

デザインと開発の会社silkeyfeelのみつばたんと、ソフトウェアの販売とかをやっているエクセルソフトの田淵さんの主催でHololensを触れる機会を作ってもらったので遊びに行ってきたよ!

f:id:tmyt:20160429140637j:plain

大きいのがHololens、小さいのがClickerって呼ばれてるクリックだけできるBluetoothデバイス。たぶんBLEじゃないかな

f:id:tmyt:20160429140743j:plain

DEVELOPMENT EDITION。かっこいい

f:id:tmyt:20160429140901j:plain 40万のゆたんぽという噂

f:id:tmyt:20160429141458j:plain f:id:tmyt:20160429141830j:plain すごくかっこいい、未来っぽい

f:id:tmyt:20160429141948j:plain f:id:tmyt:20160429141931j:plain 中から見るとこういう風にみえるみたい。液晶みたいなのが3枚くらいあるのがみえますね

f:id:tmyt:20160429143239j:plain 設定をみんなでみようって、Webカメラでスクリーンに出そう!ってやってるみたい。

f:id:tmyt:20160429150956j:plain

エクセルソフトの田淵さん、ホロレンズを被る図


Hololens思ったより軽くて、描画もすごくなめらかでした。Hololensを被ってる人たちみてると現実とは違う別の世界を見てる感じ。スマートフォンを通して違う世界をみていたIngressがもっとすごくなった感じ。

Kinectと同じ仕組みでHololens自体が世界を認識していて、バーチャルとリアルの境界面をしっかり処理しているという雰囲気。これでWindows 10が普通に動いてて、普通にアプリケーションが実行できるなんて すごい時代になったもんだなー。

赤外線でセンシングしているから直射日光とか、屋外とかはだめ(らしい。取説に書いてた。)けど、屋外でも使えるようになったら、すごい時代だよなー。普通の人が触れるようになるのは何年さきなのかしら。

とりあえずアプリデプロイしたいなー…

Continuum for Phone をStateTriggerで判別してみたよ

雑記 UWP

Windows 10時代のUWPは画面幅を中心にUIを考えろ。というガイドラインですが、やっぱ電話は片手で、PCは広い画面で。でもContinuum for PhoneしたときはPCみたいな広い画面で使いたいわけです。 でもって、Continuum for Phoneしてる時でもDeviceFamilyはMobileなのでそこんところを考慮していろいろやるとこういうXAMLができました。

Continuum for PhoneだとContinuum。電話で表示するとMobile。PCで広い画面だとWide。狭い画面だとNarrow。が表示されるXAMLです。

画面の広い、狭いはAdaptiveTriggerで。それ以外の2個はカスタムのStateTriggerを使ってます。それぞれの実装はこんな感じ。

条件の厳しいものから上にならべるとうまくいきます。実際はContinuumStateTriggerをちょっとカスタムして、Mobileで非Continuum状態というStateTriggerにしてMobileを判定。それ以外は画面幅にフォールバックとかがPCとContinuum for Phone で同じレイアウト、電話だけ違うレイアウトがやりやすいと思います。

タップしてもInputPaneの閉じないボタン

UWP 雑記
  • 追記1:PCでしか動作しません (電話だとOnCreateAutomationPeerを呼んでくれない)
  • 追記2:電話でも動作するもっと簡単な方法がありました
<!-- こうするとSIPが閉じない -->
<Button IsTabStop="false" />

  • 以下古い話

Aristeaの電話版とかでInputPaneが開いてる状態でボタンを押そうとすると InputPaneが閉じて操作しづらいとかそういうのがあります。

実際Aristeaでも使いづらくてどうにかしたいと思ってたところ、方法を見つけたので書いておきます。 このコードをプロジェクトに追加して、Button使ってるところで代わりにMenuStyleButtonを使うと、 ボタンを押してもInputPaneが閉じなくなります。

public class MenuStyleButton : Button
{
    public class CustomButtonAutomationPeer : ButtonAutomationPeer
    {
        public CustomButtonAutomationPeer(Button owner) : base(owner)
        {
        }

        protected override AutomationControlType GetAutomationControlTypeCore()
        {
            return AutomationControlType.Menu;
        }
    }

    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return new CustomButtonAutomationPeer(this);
    }
}

やってることは、Controlに対してAutomationPeerを要求された場合に、カスタムのAutomationPeerを返答し、 さらにカスタムのAutomationPeerの中でAutomationControlType.Menuを返答すると、なんとInputPaneが閉じなくなります。

というのは、MSDNのこのへんにしれっと書いていました。

テキスト入力のコンテキストでフォーカスがテキスト入力フィールドから移動したときにキーボードの表示を持続させるには、カスタム コントロールに適切な UI オートメーションの AutomationControlType を使います。たとえば、テキスト入力シナリオの半ばでメニューを開くときに、キーボードを表示したままにするには、このメニューに Menu の AutomationControlType が必要です。

タッチ キーボードの表示への応答 - Windows app development

Aristeaはたぶん今日夜ぐらいに対応してリリース予定です。https://msdn.microsoft.com/ja-jp/library/windows/apps/mt185611.aspx

msdbuilで `.` を含むプロジェクトを/tでプロジェクトを指定しようとすると失敗する

雑記

表題の通りですが、.を含むプロジェクトを含んだソリューションをmsbuildを使って なおかつ/tパラメータでビルドするプロジェクトを指定しようとするとなぜかうまくいきません。

理由は、msbuildが.slnを.metaprojに変換するときにプロジェクト名に含まれる._に置換してしまうかららしいです。

なので、たとえばこういう古いUniversalプロジェクトで見かけるコマンドライン

msbuild App1.sln /t:App1\App1.Windows

これは

msbuild App1.sln /t:App1\App1_Windows

と書き換えるとうまく動きます。

なぜこうなっているかはよくわかりませんが、MSBuildがうまくいかない時はmetaprojを生成させて、そのファイルを読むとわかるかも。

metaprojを生成するにはmsbuildemitsolution環境変数に1を設定してあげるといいです。たとえばこんな感じ。

> set msbuildemitsolution=1
> msbuild App1.sln

こうすると、App1.slnの隣にApp1.sln.metaprojというファイルができます。こっちがmsbuildが解釈するプロジェクト形式なので ここを見てあげると今回のような実はプロジェクト名が書き変わっていたということに気づけます。というかこれを出力させるまで全く分からなくて1日使いました。