tmytのらくがき

個人の日記レベルです

Mimosa 2.1.4 リリースしました

IIJmioのクーポン残量をライブタイルで表示するアプリ、Mimosaのバージョン2.1.4をリリースしました。Windows 10 / Windows 10 Mobile 向けです。

f:id:tmyt:20160229141457p:plain

時々耳にしていたワイドタイルを実装しました。なったといっても横に長くなるだけなので特に情報量増えません。俺が考えた最強のワイドタイルがあるなら教えていただければ。

ワイドタイルについて2点。

  • すでにピン止めされている項目はいったん削除してから再度ピン止めしてください
  • Windows 10 / Windows 10 Mobile のみ対応

です。

www.microsoft.com

Windows 10 Mobile の画像選択画面からカメラを起動したい人向け情報です

Windows Phone 8.1 にはカメラボタンがあったのに10 Mobile になってなくなった!クソだ!!とか、(任意のアプリ名)はWindows 10 Mobile になってカメラから直接画像取り込めなくなったしクソとか言ってる人向け。

画像選択画面を出して、右下の…を押します。

f:id:tmyt:20160229003408p:plain

場所の選択を押します。

f:id:tmyt:20160229003423p:plain

すると、カメラとか出てきます。

f:id:tmyt:20160229003505p:plain

んなもんわかるかよってむかついたひとはフィードバックツールで文句垂れましょう。

ひっくりかえしてSurfaceBook使ってて電池減るとやばい

  • Surface Bookって分離して、画面を裏向けて合体して使えるんです。時々使います。
  • Surface Bookってバッテリーが極端に少ないと分離できなくなります。

この条件があわさると

Surface Bookの画面を裏向けて合体、電池が減ってくる すると画面を裏向けた状態で分離できなくなります。しかも外にいて充電するすべがない場合充電できる場所まで画面を外に向けた状態で持ち運ばないといけなくなります。さらにその状態だとキーボードとかも使えなくなります。めっちゃ困ります。仮に充電できる場所にたどり着いたとしても上半身のバッテリが2割程度?ないと分離できる状態にならないのでそれなりに充電されるまで画面は裏返ったままです。

裏返して使うときは電源に十分注意しましょう…

Aristeaがまた書き込み規制されています

追記2 (2016/2/23 12:17)

Twitter社にお前らの仕事だろどう考えてるんだ。って質問のメールを送っていたところ、アメリカがやっと月曜日になって返事が返ってきました。

リクエストをレビューしました。問題ないのでAPIキーを再度有効にしておきましたよ!

私がききたいのはそうじゃない。しかも質問に対して回答してないし、そもそも私は彼らの要求に対する対策案を提案してない。いったいなんなの。というわけで近々また規制されるかもしれません。

追記1 (2016/2/20 22:41)

Twitter社から今回の書き込み規制について High Volume RTs が原因であるとし、RTに対するRate Limitアプリケーションが実装した場合 のみ規制を解除する。と返答がありました。

Twitter APIにはRate Limit という呼び出し回数制限が設けられており、これは基本的に15回/15min です。しかし、ステータスの更新やリツイートなどの一部のAPIについては呼び出し回数の上限が設けられていません。 ここについて、Twitter API側で制限を設けることをせずアプリケーションに対してRate Limitを設けるように彼らは要請しています。

そもそも、Rate Limitをかけるのは本来プラットフォーム側の責務であると私は考えています。それを一方的にアプリケーション側に実装することを求めてくる彼らの姿勢が気に入らない。ということで少し喧嘩しています。

リツイート操作に対してRate Limitを設けるのぐらい大したことではないので、ちょっとだけ喧嘩したら彼らの要求を受け入れるつもりです。喧嘩しているあいだ、Aristeaからツイートなどができない状態が続きユーザの皆様には大変ご迷惑をおかけいたします。申し訳ないです。


日本時間2月19日午前9時ごろよりAristeaがまた書き込み規制されています。(1日ぶり3回目)

皆様には大変ご迷惑をおかけしておりますが、現在Twitter社に問い合わせをしているところです。解決まで今しばらくお待ちくださいませ。

ちなみに、2月19日夜11時現在このブログのURLのツイートすらできません。 なおったみたいです。

おまけ

Aristeaは現在書き込み規制 という状態ですが、これは具体的に以下のような操作がすべてできません。

  • ツイートする
  • リツイートする
  • お気に入りに追加する
  • フォローする
  • DMを送信する
  • ブロックする

逆に次のような操作は可能です。

  • タイムラインを読む
  • メンションを読む
  • リストを読む
  • お気に入りにいれたツイートを読む
  • DMを読む

もし、Aristea以外のクライアントが突然こういう状態になった場合それはおそらくAristeaと同じようにTwitterから一方的に書き込み規制を受けている状態です。開発者サイドもTwitter社とやり取りをしていると思いますので優しく見守ってあげてください…

Aristeaが書き込み規制されました

追記: 日本時間2月18日午前8時現在、書き込み規制は解除されました

なんか日本時間2月17日午後9時ごろからAristeaからツイートできない。という情報が入ってきました。

f:id:tmyt:20160218002705p:plain

あれです。AristeaがTwitterから書き込み規制されました。(1年8か月ぶり、2回目)ユーザの皆様には大変ご迷惑をおかけいたしますが、いまTwitterに文句つけてるところです。解決までもうしばらくお待ちくださいませ。

Aristea 1.5.24 リリースしました

前回1月中頃だったので約1か月も空いてしまいました。バグとかいっぱいあって早くリリースしないといけないのに遅くなっちゃってごめんなさい。ということで今回の更新内容です。

  • 長文DMが表示されない問題を修正しました
  • miil.me のURLが表示できないことがある問題を修正しました
  • トーストをタップしてもなにも表示されない問題を修正しました
  • 320px表示にしたときアカウントのアイコンが表示されない問題を修正しました
  • アカウントが増えてしまう問題を修正しました
  • クイック投稿エリアのレイアウトを修正しました
  • ブロック/スパム報告ができるようになりました
  • NuAns NEO、Every Phone などで画像ポップアップのレイアウトを修正しました
  • 画像への透かし書き込み処理を修正ました
  • アプリ終了時の安定性を向上しました
  • 画像のリサイズ処理を修正しました
  • 送信ボタンのサイズが大きくなりました
  • AppBarのヒットテストを調整しました (Phoneのみ)
  • ローカル通知が廃止になりました
  • 返信時のデフォルト文字列が変更されてます*1
  • クイック投稿エリアのレイアウトを調整しました
  • 複数画像の並び順を変更しました

わりともりだくさん。主にバグ修正。あとレイアウトの修正。それから使いやすくしました。という感じです。複数画像の並び順についてなんですが、いままでのAristeaはこうでした。

1 3
2 4

で、これって公式クライアントと並び順違って、なおさないとなー。と思っていたのを今回入れました。なので今回からはこう並びます。

1 2
3 4

次に、ローカル通知が削除されました。ローカル通知自体は、AristeaでPush通知が実装される前にあったものでアプリが実行中でないといけないというものでした。*2で、そのあとPush通知が実装されるのですが機能を特に削除してなかったので似たような機能が複数存在する状態になっていました。そんでもってよく、通知が複数出るんだけど。という話をよくいただいていて、それ通知2個ONにしてるからでしょ。と回答していたのですがやっとまぁ消しました。というだけです。これからはPush通知をご利用ください。

ちなみにWindows 10でPush通知を有効にしていると通知領域からふぁぼったりリツイートしたり、リプライ送れたりします。結構便利なのでおすすめです。さらにちなみに、Windows 10 のトーストの挙動かなり怪しくて、アクションセンターに20個ぐらい通知がたまっているとAristeaのトーストが出なくなります。どう見てもバグなんですけど仕様という話があります。ほんまかいなというところです。

*1:複数アカウントをAristeaへ登録していて、そのアカウントを含む他人のツイートに返信したとき、Aristeaに登録されているすべてのアカウントがデフォルト文字列から除かれていました

*2:バックグラウンドでAPIアクセスしたりできないのでそうなってます

Adaptive and Interactive Toast でアプリの起動を正しくハンドルしよう

NuAnsの話もいいけどちゃんとでべろっぷめんとの話もたまにはしたいよね。ということで、Windows 8.xのころのトーストでタップされた時の引数を設定するには、

<toast launch="ここが引数">
  <visual>
    <!-- いろいろ -->
  </visual>
</toast>

こんなXMLを書いて、App.xaml.csのOnLaunchedでこうやってあげて、MainPage.xaml.csとかのOnNavigatedToとかでハンドリングすればいいんですが

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    // e.Arguments にlaunch で指定した文字列が入ってます。
    var args = e.Arguments;
    // Navigateとかで適当に引き渡す
    ...
    rootFrame.Navigate(typeof(MainPage), args);
}

Windows 10で追加された新しいトーストだとうまく動きません。とりあえずXMLはこんな感じに書いたとします。

<toast launch="好きな文字列">
  <visual>
    <binding template="ToastGeneric">
    </binding>
  </visual>
  <actions>
    <!-- 1) foreground -->
    <action content="yes" arguments="yes" />
    <!-- 2) background -->
    <action content="no" arguments="no" activationType="background" />
    <!-- 3) protocol -->
    <action content="web" arguments="https://example.com/" activationType="protocol" />
  </actions>
</toast>

このとき、actions の中の3つは、それぞれOnActivated、BackgroundTask、Protocolなのでなにもしない。でハンドリングしますが、 ボタンじゃないところを触った時はどうしたらいいの。というと、activationType="foreground" (何も指定しない場合はforeground)と同じように OnActivatedでハンドリングしないといけなくなりました。

つまるところ古いトーストのOnLaunchedのままにしておくとトーストタップしたときスプラッシュすら出ずにアプリが起動しなくなります。

なので、他にOnActivated使わないようなアプリなのであればApp.xaml.csをこんな感じに書くといいかもしれません。

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    OnActivated(e);
}

protected override void OnActivated(IActivatedEventArgs e)
{
    // ** OnLaunched のなかみをコピペしてちょっと修正したもの
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();

        rootFrame.NavigationFailed += OnNavigationFailed;

        if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { }

        Window.Current.Content = rootFrame;
    }

    if (rootFrame.Content == null)
    {
        // ** 適当にキャストして値を取り出しますよ
        rootFrame.Navigate(typeof(MainPage), 
            (e as LaunchActivatedEventArgs)?.Arguments ?? (e as ToastNotificationActivatedEventArgs).Argument);
    }
    Window.Current.Activate();
}

LaunchActivatedEventArgsはIActivatedEventArgsを実装しているので、こんな感じに書いてあげるとちょっと楽かも。 という感じですが、もしかするとOnLaunchedと、OnActivatedから呼び出すIActivatedEventArgsとArgumentを受け取る関数としたほうがいいかも? たとえばこんなかんじで。

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    OnLaunchedCore(e, e.Arguments);
}

protected override void OnActivated(IActivatedEventArgs e)
{
    if(e is ToastNotificationActivatedEventArgs){
        OnLaunchedCore(e, ((ToastNotificationActivatedEventArgs)e).Argument);
        return;
    }
    base.OnActivated();
}

private void OnLaunchedCore(IActivatedEventArgs e, object parameter)
{
    // ** OnLaunched のなかみをコピペしてちょっと修正したもの
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();

        rootFrame.NavigationFailed += OnNavigationFailed;

        if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { }

        Window.Current.Content = rootFrame;
    }

    if (rootFrame.Content == null)
    {
        // ** 適当にキャストして値を取り出しますよ
        rootFrame.Navigate(typeof(MainPage), parameter);
    }
    Window.Current.Activate();
}

ちなみに、古いトーストを使っている場合は従来どおりの挙動になります。つまりOnLaunchedで引数を取得します。