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

AzureVM Power Switch

UWP Windows10 azure Xamarin iPhone Android

f:id:yamamoWorks:20160924165044p:plain

Microsoft Azure 仮想マシンの起動、停止が行えるモバイルアプリケーションです。
先行してWindows 10 Mobile/Windows 10版のアプリを公開していましたが、新たにiOS版、Android版が加わりました!

Microsoft  Apple  Google 

機能概要

  • 仮想マシンの起動、再起動、停止
  • 複数アカウントに対応
  • サブスクリプション単位での表示/非表示設定(Windows版のみ)

スクリーンショット

Windows 10 iOS Android
f:id:yamamoWorks:20160529130835p:plain:W200 f:id:yamamoWorks:20160924161817p:plain:W200 f:id:yamamoWorks:20160924161811p:plain:W200
f:id:yamamoWorks:20160529130843p:plain:W200 f:id:yamamoWorks:20160924162525p:plain:W200 f:id:yamamoWorks:20160924162538p:plain:W200

備考

Azure Resource Manager(ARM)で管理されている仮想マシンが対象となります。
認証にはMicrosoftアカウントではなくAzure ADで管理しているアカウントが必要です。

ActivityIndicatorをProgressBarからProgressRingに変更する

Xamarin

Xamarin Formsの読み込み中などの状態を表現するActivityIndicatorですが、iOSとAndroidではグルグル回る円で描画され、UWPでは何故か左から右に粒が流れるProgressBarで描画されておりデザインの統一が取れなくて困ります。

iOS Android UWP
f:id:yamamoWorks:20160816184154g:plain f:id:yamamoWorks:20160816184158g:plain f:id:yamamoWorks:20160816184205g:plain

そこでカスタムレンダラーを用いてProgressRingに置き換えてみました。

UWP(Ring版)
f:id:yamamoWorks:20160816185830g:plain

Xamarin FormsはオープンソースになっているのでデフォルトのレンダラーActivityIndicatorRenderer.csをコピペして少し変更しただけです。

GitHubにソースコードを置いておきます。 github.com

TableViewにコレクションデータをバインドする

Xamarin

Xamarin FormsのTableViewListViewと異なりコレクションデータをバインドする機能はありません。 TableViewは設定画面の構築で使用する事を想定しているようですが、メールのアカウント設定のように可変なレコードを扱いたいケースがあるかと思います。 この場合、コードビハインドでレコードをループしてTableViewの中のTableSectionに行を追加するコーディングとなり美しくありません。 そこで今回はTableView(TableSection)にコレクションデータをバインドする機能を追加してみました。

なんちゃってデータバインドなので限定的な用途での参考程度とお考えください。

github.com

コードはGitHubを参照して頂くとして、ここでは使い方と実行イメージだけ載せておきます。

使い方

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XFApp1"
             x:Class="XFApp1.MainPage" Title="Settings" x:Name="root">
  <ContentPage.BindingContext>
    <local:MainPageViewModel />
  </ContentPage.BindingContext>
  <TableView Intent="Settings">
    <TableRoot>
      <TableSection Title="アカウント" local:CollectionBindings.ItemsSource="{Binding Accounts}">
        <local:CollectionBindings.ItemTemplate>
          <DataTemplate>
            <TextCell Text="{Binding Name}" Detail="{Binding Text}" />
          </DataTemplate>
        </local:CollectionBindings.ItemTemplate>
        <TextCell Text="アカウントを追加" Command="{Binding Source={x:Reference root}, Path=BindingContext.AddCommand}" />
      </TableSection>
    </TableRoot>
  </TableView>
</ContentPage>
public class MainPageViewModel : BindableObject
{
    public ObservableCollection<Account> Accounts { get; }

    public ICommand AddCommand { get; }

    public MainPageViewModel()
    {
        Accounts = new ObservableCollection<Account>(new[]
        {
            new Account { Name= "iCloud", Text="iCloud Drive, リマインダー, メモとその他2項目" },
            new Account { Name= "Outlook", Text="メール、連絡先、カレンダーリマインダー、メモ" },
            new Account { Name= "Gmail", Text="メール、連絡先、カレンダー" }
        });

        AddCommand = new Command(() =>
        {
            Accounts.Add(new Account { Name = "Yahoo!", Text = "メール、連絡先、カレンダー" });
        });
    }
}

public class Account
{
    public string Name { get; set; }

    public string Text { get; set; }
}

実行イメージ

f:id:yamamoWorks:20160730225601p:plain:w300  f:id:yamamoWorks:20160730225611p:plain:w300

Kaspersky 16.0.1.445 で Visual Studio 2015 が起動しなくなる場合の対処方法

追記(2016/09/05)

どうやら下記の問題は対応されたようですね。
定義ファイルの更新と同時にパッチも適応され、バージョン16.0.1.445(e)であれば問題ないようです。


原因不明で3回もOS再インストールするハメになったのでエントリー (# ゚Д゚)

Visual Studio 2015 Update 3 のパッチ KB3165756 を当てたら...が事の始まりだったのですが、実はパッチは関係なく直前にアップデートしたKasperskyが問題でした。

Visual Studio 2015を起動しようとするとCPUを30%使ったまま何時間放置しても起動せず、修復やアンインストールも同じくCPUを喰ったまま進まず、プロセスも殺せず、Windowsの再起動も出来ず、電源OFFするしかない状態に。

原因不明を探るべくOS再インストールから順に試したところ、Kaspersky 2016が犯人である事が判明しました。

Kasperskyのホームページからダウンロードした2016/7/26時点での最新バージョン 16.0.1.445 に問題があるようです。
※他マシンにインストールされているバージョン 16.0.0.614 では問題が発生していません。

なお、どのエディションのVisual Studio 2015でも起動しなくなるようです。

対処方法

Visual Studioのユーザデータを削除すると起動できるようになります!

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" /ResetUserData

以上!

stackoverflow.com

Google Calendar Mobile Gateway 10周年

ASP.NET MVC GCMG Google カレンダー お知らせ

10年前、どんな携帯電話を使っていましたか?

今やスマートフォンが主流ですが当時はガラケーの全盛期でした。
一方、インターネットでは様々な便利なサービスが出現していましたが基本的にはパソコンのブラウザで利用するもので、携帯電話で利用できるサービスは限られていました。
Googleカレンダーもその1つです。当時は携帯電話でGoogleカレンダーの予定を見ることは出来なかったのです。(後に超使いづらいものが出てきましたが…)

その頃に自宅サーバを立ててWebアプリを作っていた私はGoogleの各種サービスがAPIを公開し始めているのを知り、Googleカレンダーの予定を参照できる携帯電話向けのWebアプリ「Google Calendar Mobile Gateway」を作り2006年7月に公開しました。

version 1 (2006/7)
f:id:yamamoWorks:20160529150344p:plain
version 2 (2007/1)
f:id:yamamoWorks:20160711234358p:plain
version 3 (2009/12)
f:id:yamamoWorks:20160711232426p:plain f:id:yamamoWorks:20160711232424p:plain

 

様々なブログや雑誌でも紹介して頂き、ピーク時(2010年4月)には月間59万PV、1万ユーザに達するなど、多くの方々に利用して頂いたことを大変嬉しく思います。また、フォーラムやブログにも沢山の感謝の言葉や様々な機種での動作報告のコメントを頂き、開発者冥利に尽きる思いでした。

 

少し技術的な面に触れておきますと、当初はASP.NET + SQL Serverの構成で自宅サーバでホストしていました。(現在はASP.NET MVC + Azure SQLをAzure仮想マシンでホスト)

当時の携帯電話のブラウザは1ページの容量が100KBまでで回線速度も遅かったので、ポストバック機構やビューステートで大量のコードをHTMLに吐き出すWebフォームは不向きでした。その為、ASP.NETなんだけどクラシックASP(Active Server Pages)っぽい作りにしていました。後にASP.NET MVCが出てきて「これだ!」と思いversion 3として作り直しました。

GoogleのAPIも初めはAtomベースのGDataでしたが数年前に廃止されJsonベースの新しいAPIに移行されていて時代の流れを感じます。

Google Calendar Mobile Gatewayは皆さんに便利なツールをお届けすると同時に、新しい技術を試す実験場でもありました。

 

スマートフォンの普及に沿うようにGoogle Calendar Mobile Gatewayのアクセス数も年々下がっていて、現在は月間6.5万PV、1500ユーザぐらいです。今のところまだ停止する予定は無いですが、そろそろ役目を終える時期が近づいているのではないかと。

しかし、10年はあっという間ですねぇ…